3

次のモデルを作成しました

public class myModel
{
    public int ID;
    public string Name;
    public int[] days;
}

次に、コントローラーでアクションを作成しました

[HttpPost]
public ActionResult myCtrlAction(myModel thisModel)
{
   if (ModelState.IsValid)
        {
            return Json(thisModel);
        }
        else
        {
            string errorMessage = "<div class=\"validation-summary-errors\">"
              + "The following errors occurred:<ul>";
            foreach (var key in ModelState.Keys)
            {
                var error = ModelState[key].Errors.FirstOrDefault();
                if (error != null)
                {
                    errorMessage += "<li class=\"field-validation-error\">"
                     + error.ErrorMessage + "</li>";
                }
            }
            errorMessage += "</ul>";
            return Json(new myModel { Name = errorMessage });  //just for now
        } 
   }

私のjavascriptでは、jQuery.post()を使用してデータを送信します

$("#myBtn").click(function () {
var mydata = {
          ID: $("#inputID").val(),
          Name: $("#inputName").val(),
          Days: $("#selectDays").select2("val")
       }
    var url = 'myController/myCtrlAction';  //definitly it was writtern as @Url.Action
    $.post(url, mydata, function(data) { alert(data); //which shows [object object] 
                     }, 'json');
 });

Chromeでデバッグするときのリクエストで、ヘッダーに次のように表示されました

フォーム データ ID: 5 名前: SomeName 日[]: 6 日[]: 5

応答で、モデルのjson形式を次のように取得しました

{ID: "0", Name: "null", Days: "null"}これは、モデルの状態が有効であることを意味しますが、値がないのはなぜですか?

どんな体にも考えがあります。私は何を間違えたのですか、それとも何か見逃していますか?

4

3 に答える 3

1

モデルのデータが設定されていないため、Chrome で null 値が返されると思います。

JavaScript にタイプミスがない場合 (そして、質問を作成するときにタイプミスしただけの場合は、メソッドでこれを試してくださいmyCtrlAction

まず、myModel でフィールドのゲッターとセッターを作成してみてください。それで;

交換;

 errorMessage += "</ul>";

 return Json(new myModel { Name = errorMessage });  //just for now

これとともに;

 myModel myMODTest= new myModel();
 myMODTest.setID(1111);
 myMODTest.setName("testName");
 myMODTest.setDays({1,2,3});
 return Json(myMODTest);  //just for now

ブラウザで次のようになるかどうかを確認してください。

{ID: "1111", Name: "testName", Days: "{1,2,3}"}

于 2012-11-13T14:14:14.200 に答える
1

私はこれを次のように行います:

  • 1: JavaScript: ボタンをクリックしたとき: フォームデータをシリアル化し、コントローラーに送信します:

    function ajaxSubmitEditSupplierQuote() {
        var formData = $("#SupplierQuoteEditForm").serializeArray();
        $.ajax({
            type: "POST",
            url: '@Url.Action("Edit", "SupplierQuote")',
            data: formData,
            dataType: "json",
            cache: false,
            success: function (data1) {
                // Here I create then a new Url-string.   
                // Simple access your Json Data, as you have named it in the return of the Controller-Action.
                var strUrl = "/Equipment/" + data1.target.toString();                   
                // ...
                // 
                // ...
            }
        });
    }        
    
  • 2: カスタム Json リターンを使用した Controller-Action

    [HttpPost]
    public ActionResult Edit(SupplierQuoteDto supplierQuoteDto)
    {
    
        // ........... code
    
        if (_userContext.EquipmentAction.ClickedAction == ActionType.Create)
            return Json(new { target = "Create" });
        else if (_userContext.EquipmentAction.ClickedAction == ActionType.Edit)
            return Json(new { target = "Edit" });
        else
            return new EmptyResult();
    }
    
  • 3: あるいは、JavaScript で EmptyResult() もキャッチしたい場合は、単純に

    success: function (data1) { 
        if (data1.toString() == "") {
            // .... alert
        }
        else {
            /// .... go on with coding
        }
    }
    
于 2012-11-13T14:47:03.787 に答える
0

投稿を行うJavaScriptコードを確認してください。タイプミスがあります: '.' それ以外の '、':

$.post(url, mydata, function(data) { alert(data); }, 'json');
于 2012-11-13T14:03:57.780 に答える