16

我在使用 Ajax.BeginForm 时遇到了一些困难

我有这样的看法

  <% using (Ajax.BeginForm("ActionName", null , null, new { id = "FormName" }))
     {%>
      <input type="hidden" value = '<%= Html.Encode( Model.id) %>' name="id"/>
      <textarea id="message" name=message rows="4" style="width: 90%"> 
      </textarea>
  <% }%}

动作方法是这样的

    [AcceptVerbs(HttpVerbs.Post)]
    [Authorize]
    public ActionResult ActionName(int id, string message)
    {
     ....
    }

我正在尝试将“id”和“消息”传递给操作方法。我正在为 routeValues 传递“null”,但我不知道要传递什么。理想情况下,我试图找到一个不需要路由值但采用 actionName 和 htmlattributes (用于表单名称)但我找不到的重载。我不想在视图模型中添加“消息”,我确实需要那里的 FormName 用于 jquery 操作。解决此问题的最佳方法是什么?

哦,我忘了提,这就是我发布表格的方式

 $.post($("#FormName").attr('action'), $("#FormName").serialize(),
                               function(result) {
                                   $("#correspondingDiv").html(result);
                               }
                            );
4

2 回答 2

32

使用这个重载:http: //msdn.microsoft.com/en-us/library/dd470605.aspx

Ajax.BeginForm(
    string "ActionName",
    string "ControllerName",
    new routevalues {id="IDValue",message="MyMessage"},
    new AjaxOptions {OnBegin=[someFunction], OnFailure=[failureFunction] },
    new { id = "FormName" }
)
于 2010-04-08T13:24:56.413 回答
0

尝试:

  <% using (Ajax.BeginForm("ActionName", null))
     {%>
      <input type="hidden" value = '<%= Html.Encode( Model.id) %>' name="id"/>
      <textarea id="message" name=message rows="4" style="width: 90%"> 
      </textarea>
  <% }%}

我认为您使问题过于复杂,ID 和 Message 将在表单字段的回发中填充,因此您无需在表单声明中指定它们。Html.BeginForm()除非您真的想要 Ajax 响应,否则您可能还想尝试。

于 2010-04-08T13:20:51.373 回答