2013-08-05 80 views
0

我有阿賈克斯形式在我看來:如何使用ajax鏈接而不是提交表單按鈕?

@using (Ajax.BeginForm("SearchHuman", "Search", new AjaxOptions(){ 
InsertionMode = InsertionMode.Replace, 
UpdateTargetId = "result" })) 

只使用{

<div class="editor-field"> 
@DescriptionStrings.Lastname: 
@Html.TextBox("LastName") 
</div> 

<div class="editor-field"> 
@DescriptionStrings.Firstname: 
@Html.TextBox("Name") 
</div> 

//submit button 
<input type="submit" value='Start Searching' /> 

//submit link 
@Ajax.ActionLink("search", "OtherSearch", new{lastName ="",...}, new AjaxOptions() 
     { 
      InsertionMode = InsertionMode.Replace, 
      UpdateTargetId = "tab" 
     }) 

}

我想有提交按鈕和鏈接,2個不同的搜索(在不同的數據庫)一種形式。但是,如何將表單的文本框中的路由值傳遞給Ajax.ActionLink?

在此先感謝!

回答

0

我們選擇的解決方案是實現一個自定義ActionMethodSelectorAttribute這使我們能夠區分基於哪個按鈕被按下了名稱屬性。然後,我們飾有ActionName裝飾給他們所有相同的動作名稱(在BeginFrom幫手指定的)許多方法,然後我們使用我們的自定義ActionMethodSelector裝飾來區分哪一種方法是根據按鈕的點擊名字叫。最終結果是每個提交按鈕都會導致調用一個單獨的方法。

一些代碼來說明:

在控制器:

[ActionName("RequestSubmit")] 
[MyctionSelector(name = "Btn_First")] 
public ActionResult FirstMethod(MyModel modelToAdd) 
{ 
    //Do whatever FirstMethod is supposed to do here 
} 

[ActionName("RequestSubmit")] 
[MyctionSelector(name = "Btn_Second")] 
public ActionResult SecondMethod(MyModel modelToAdd) 
{ 
    //Do whatever SecondMethod is supposed to do here 
} 

鑑於:

@using (Ajax.BeginForm("RequestSubmit",..... 
<input type="submit" id="Btn_First" name="Btn_First" value="First"/> 
<input type="submit" id="Btn_Second" name="Btn_Second" value="Second"/> 

至於自定義屬性:

public string name { get; set; } 
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) 
{ 
    var btnName = controllerContext.Controller.ValueProvider.GetValue(name); 
    return btnName != null; 
} 
+0

能否請您指教一下屬性應該我的自定義屬性擴展?它是NonActionAttribute? –

+1

它應該擴展:ActionMethodSelectorAttribute。 – JTMon

1

但如何將路由值從表單的文本框傳遞到Ajax.ActionLink?

你不行。如果要將值發送到服務器,則應該使用提交按鈕。您可以使用同一個表單提交2個按鈕,這兩個按鈕都提交給相同的控制器操作。然後在這個動作中,你可以測試哪個按鈕被點擊,並根據它的值執行一個或另一個搜索。

例子:

<button type="submit" name="btn" value="search1">Start Searching</button> 
<button type="submit" name="btn" value="search2">Some other search</button> 

,然後你的控制器動作中:

[HttpPost] 
public ActionResult SomeAction(string btn, MyViewModel model) 
{ 
    if (btn == "search1") 
    { 
     // the first search button was clicked 
    } 
    else if (btn == "search2") 
    { 
     // the second search button was clicked 
    } 

    ... 
} 
相關問題