将表单数据作为类型化视图模型提交给操作

时间:2013-08-14 09:23:53

标签: asp.net-mvc-3 http-post

我想在没有提交按钮的表单中提交数据,而是在具有click事件的简单div中提交数据,并且控制器的操作应该将所有这些数据作为强类型视图模型接收。 例如,我有以下html

<form method="POST"  id="frm" name="frm">
<input type="text" name="Texting"/>
<select name="Car">
 <option value="volvo">Volvo</option>
 <option value="saab">Saab</option>
 <option value="opel">Opel</option>
 <option value="audi">Audi</option>
 </select> 
<input type="checkbox" name="IsChecked" checked="checked"/>

</form>
                @ PageResources.btnSearch             
<script type="text/javascript">
function doAction() {
    $.post("DoAction",JSON.stringify($("#frm").serialize()), function(data) {
    });

  }

控制器的动作也是这样的

    [HttpPost]
    public ActionResult DoAction(TestViewModel model)
    {

        return Json(model, JsonRequestBehavior.AllowGet);
    }

和视图模型

  public class TestViewModel
{
    public string Texting;
    public string Car;
    public bool IsChecked;
}

当调用动作时,问题是即使我在控件中输入了某些内容,模型也没有值 有什么问题?为什么mvc不会将我的数据解释为视图模型?

1 个答案:

答案 0 :(得分:0)

在你的Jquery Doaction()函数中。准备视图模型如下。

var model={
         Texting:$('#IdForInputText').val(),
         Car:$('#IDforSelectList').val(),
         IsChecked:$('#IDForCheckBox').is(':checked'),
}

 var model={
             Texting:$('input[name="Texting"]').val();
             Car:$('select[name="Car"] option:selected').val(),
             IsChecked:$('input[name="IsChecked"]').is(':checked');
    }

然后使用

 JSON.stringify(model)

希望它有所帮助。如果不理解,请留下评论