将两个参数从视图传递到控制器

时间:2012-11-19 05:43:05

标签: asp.net asp.net-mvc asp.net-mvc-3 jquery asp.net-ajax

我正在使用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 为空,但 modo 的值是正确的。< / p>

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

此致 里卡多

2 个答案:

答案 0 :(得分:1)

使用ajax

查看您要发送的post参数
data: { 
        Persona: JSON.stringify(persona),
        Modo: modo 
      }

MVC的默认模型绑定遵循基于参数名称的约定,如果您希望默认模型绑定器工作,则必须在ActionResult中指定相同的发送和接收参数。应该看起来像

public ActionResult Grabar(Persona Persona, string Modo){...}

答案 1 :(得分:0)

将参数名称更改为persona应该有效:

public ActionResult Grabar(Persona persona, string modo){

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

相关问题