2010-04-08 122 views
15

我在与Ajax.BeginFormasp.net的MVC 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'和'message'传递给操作方法。我为routeValues传递'null',但我不知道要传递什么。理想情况下,我试图找到一个不需要路由值的重载,但采取了actionName和htmlattributes(对于表单名称),但我找不到一个。我不想向视图模型添加“消息”,而且我确实需要在那里用于jquery操作的FormName。 解决此问题的最佳方法是什么?

哦,我忘了说,这是我的发布形式

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

回答

29

使用此重载: 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" } 
) 
+0

当我尝试这个解决方案时,控制器操作方法被调用,但它仍然具有在BeginForm中定义的初始路由值,而不是在窗体中填写的值。有什么想法吗 ? – 2010-04-08 13:48:02

+1

使用Ajax.BeginForm无法填充表单中的值,因为BeginForm助手在页面呈现时被调用。您可以使用Request.Form获取表单字段的值。 – 2010-04-08 14:57:02

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和消息将得到从表单中的字段填充回发,因此您无需在表单声明中指定它们。除非您确实需要Ajax响应,否则您可能还想尝试Html.BeginForm()

+1

我需要Ajax响应,我也说我需要提及的Ajax.BeginForm表格名称如我在页面多种形式。 – 2010-04-08 13:28:51

相关问题