1

テキスト ファイルがあり、ユーザーがファイルをアップロードすると、コントローラ アクション メソッドはステート マシンを使用してそのファイルを解析し、一般的なリストを使用していくつかの値を保存します。これを非表示フィールドの形式でページに戻します。次に、ユーザーはリンクをクリックして JS モーダル ダイアログ ボックスを呼び出し、リストを表示して、リスト内の各項目にコメントを追加できます。彼らがリンクをクリックすると、その非表示フィールドを取得して何かを実行し、部分ビューをレンダリングするアクション メソッドに投稿しようとしています。問題は、このアクション メソッドに投稿すると、このフィールドが null として渡されることです。

ここに私のコードがあります

@Html.HiddenFor(model => model.ExceptionString)



if (Model.ExceptionString != null)
           {
               if (Model.ExceptionString.Count > 0)
               {
        <div class="bodyContent">
            <span class="leftContent">
                @Html.Label("Test Exceptions")
            </span><span class="rightContent"><span id="TestExceptionChildDialogLink" class="treeViewLink">Click
                here to View Test Exceptions</span>
                <br />
                <span id="TestExceptionDisplay"></span>
                @Html.HiddenFor(model => model.ExceptionString)
                <input id="ExceptionString" type="hidden" value="@Model.ExceptionString" />
            </span>
        </div>
               }
           }

<div id="testExceptiontreeview" title="Dialog Title" style="font-size: 10px; font-weight: normal;
    overflow: scroll; width: 800px; height: 450px;">
    <div id="testExceptions">

    </div>
    <div id="inputTestExceptions" style="display: none;">
    </div>
</div>


  var runlogTestExceptionUrl = '@Url.Action("ListTestExceptions", "RunLogEntry")';

JS FILE

 $("#inputTestExceptions").load(runlogTestExceptionUrl, { ExceptionStrings: $("#ExceptionString").val() });

コントローラーのアクション

[HttpPost]
        public ViewResult ListTestExceptions(List<string> ExceptionStrings)
        {

JS から abive アクション メソッドに渡されるときに例外文字列リストが null になる理由についてのアイデアはありますか?

4

1 に答える 1

1

$("#ExceptionString").val()単一の文字列を返します。これは、への呼び出しが.loadMVCアプリケーションに単一の名前/値ペアを投稿していることを意味します。

名前と値のペアのコレクションを投稿する必要があります。名前は同じになります。インデクサーを使用したコレクションの名前です。値は例外文字列になります。これには、いくつかの重要なリファクタリングが必要になります。

これが機能する基本的な方法は次のとおりです。

コードを表示:

<form action="@Url.Action("ListTestExceptions", "RunLogEntry")" TYPE="POST">
@{ int counter = 0;}
@foreach(var exception in Model.ExceptionString)
{

  <input id='@("ExceptionString["+counter+"]")' type="hidden" value='@exception' />
  @{ counter =counter + 1; }
}
</form>

JSコード:

$.ajax({
        url: runlogTestExceptionUrl,
        data: $(this).serialize(),
        success: function(data) {
             $('#inputTestExceptions').html(data);
        }
});

コントローラのアクションは変更されていません。

[HttpPost]
    public ViewResult ListTestExceptions(List<string> ExceptionStrings)
    {

明らかに、これはコードとすぐに統合されるわけではありません。ただし、これは、フォームからMVCの単一のコレクション変数にデータを投稿する方法になります。

:私はかみそりの構文に少し錆びているので、いくつかの小さな構文の問題があるかもしれません。見つけたら修正します。

于 2012-09-19T16:13:09.687 に答える