1

我正在使用 Visual Studio 2010 和 ASP.NET MVC4 视图引擎剃须刀。

我喜欢将两个参数(对象、字符串)从视图传递到控制器。在视图中,我有这个:

var persona = {};
        function ModeloPersona() {
            persona.CI = $('#CI').val();
            persona.Nombre = $('#Nombre').val();
            persona.Apellidop = $('#Apellidop').val();
            persona.Apellidom = $('#Apellidom').val();
            persona.Direccion = $('#Direccion').val();
            persona.Sexo = $('#Sexo').val();
            persona.Cumple = $('#Cumple').val();
        }

        function Grabar(modo) {
            ModeloPersona();
            $.ajax({
                url: '@Url.Action("Grabar", "Home")',
                type: 'POST',
                data: { 
                   Persona: JSON.stringify(persona),
                   Modo: modo 
                },
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function () {

                }
            });
        }

我的控制器有这个:

public ActionResult Grabar(Persona mPersona, string modo){
   if (ModelState.IsValid){
     if (modo == "2"){

     }
     else{

     }
   }
   return View();
}

问题如下,对象mPersona为 null 但modo的值是正确的。

为什么 mPersona 为空?有什么问题,请帮我解决这个问题

问候里卡多

4

2 回答 2

1

查看post您使用 ajax 发送的参数

data: { 
        Persona: JSON.stringify(persona),
        Modo: modo 
      }

MVC 的默认模型绑定遵循基于参数名称的约定,如果您希望默认模型绑定器工作,您必须在您的情况下指定相同的发送和接收参数,接收参数ActionResult应该如下所示

public ActionResult Grabar(Persona Persona, string Modo){...}
于 2012-11-19T06:17:21.307 回答
0

将参数的名称更改为persona应该可以:

public ActionResult Grabar(Persona persona, string modo){

操作方法的参数名称必须与 JSON 数据中的对象名称匹配,模型绑定才能起作用。

于 2012-11-19T05:50:05.743 回答