2010-04-08 80 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

相關問題