ASP.NET MVC 3 Ajax.BeginForm提交 - 发送了什么?

3
我有一个部分视图,其中包含使用ajax.begin form创建的表单。
 @using (Ajax.BeginForm("Save", "saveStuffHere", null, new AjaxOptions 
   {HttpMethod = "Post", InsertionMode = InsertionMode.InsertAfter,
   OnSuccess = "handleSuccess", OnFailure = "handleError"}))
 {

在我的控制器saveStuffHere中,我有一个名为Save的方法。
public class saveStuffHereController : Controller
 {
     ....other things...
    /// <summary>
    /// Save the information
    /// </summary>       
    /// <returns></returns>
    [HttpPost]
    public JsonResult Save(I do not know what is passed here)
    {
       .... db code goes here
    }

我正在使用表单的submit()方法保存表单。如果我在控制器中调用该方法错误,请纠正我。但我的问题是,到底发送了什么?换句话说,我的Save方法应该期望什么? 基本上,我不知道我的Save方法传递了什么。是否有一种方法可以指定我要传递的内容?我理解并知道如何使用jquery ajax,但我想在转向jquery ajax之前尝试这种方法。
1个回答

3

具体返回什么内容?

会发送回表单中所有的 input 标签。所以如果在最简单的情况下,你有以下内容:

@using (Ajax.BeginForm("Save")) {
    <input type='hidden' value='test' name='AFormField' />
}

接下来控制器操作应该期望通过以下方式进行路由:

[Post]
public JsonResult Save(string AFormField)

如果您正在使用HTML助手和强类型模型...
@using (Ajax.BeginForm("Save")) {
    @Html.EditorFor(model => model)
}

那么您可以期望模型实例被路由到动作:

[Post]
public JsonResult Save(MyModelType model)

那我就完了。我的表单里只有由jqx小部件网格创建的复选框,这些复选框是被样式化成看起来像复选框的div。底部只有电子邮件和电话号码两个输入框。不管怎样,还是谢谢你,现在是时候告诉老板我不会按他的方式做,而是使用jquery ajax了。非常感谢。 - Jack Thor
@JackThor 你可以使用与复选框样式的div同步的隐藏输入来实现。但实际上,我认为JQuery Ajax和Ajax.BeginForm之间没有太大的功能区别,只是语法不同。 - McGarnagle
@McGarngle 即使功能相同,如果我使用表单的 submit() 功能,我对发送的内容没有控制权,对吗?或者我可以使用 onBegin 来修改要发送的内容吗?因为并不是所有东西都需要被发送,而使用 jQuery 的 ajax 可以让我挑选。 - Jack Thor
@JackThor .submit() 是同步回传,而不是 Ajax ... 所以我不确定为什么你会使用它。但我看到你是对的,使用 Ajax.BeginForm 确实不能直接控制发送的内容,而使用 JQuery 的 $.post,你可以直接将要发送的数据作为选项哈希传递。 - McGarnagle
太棒了,再次感谢你的帮助,喜欢辛普森图片,我现在回家看辛普森了 :) - Jack Thor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接