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 Days[]:6 Days[]:5

作为回应,我得到了我的模型的 json 格式

{ID: "0", Name: "null", Days: "null"}这意味着我的模型状态是有效的,但为什么它没有值?

任何人都有任何想法。我做错了什么或者我错过了什么?

4

3 回答 3

1

我认为您的模型数据未设置,因此您在 Chrome 上获得空值。

如果您的 javascript 没有拼写错误(并且您在创建问题时只输入了拼写错误,请在您的方法中尝试此操作myCtrlAction

首先尝试为 myModel 中的字段创建 getter 和 setter。然后;

代替;

 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 回答