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"
        })

}

1つのフォームのみを使用して、送信ボタンと2つの異なる検索(異なるデータベース内)のリンクが必要です。しかし、フォームのテキスト ボックスから Ajax.ActionLink にルート値を渡すにはどうすればよいでしょうか。

前もって感謝します!

4

2 に答える 2

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
    }

    ...
}
于 2013-08-05T11:36:26.983 に答える
0

私たちが選択した解決策は、name プロパティに基づいてどのボタンが押されたかを区別できるカスタム ActionMethodSelectorAttribute を実装することでした。次に、すべて同じアクション名 (BeginFrom ヘルパーで指定されたもの) を与える ActionName デコレーターで多くのメソッドを装飾し、カスタム 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;
}
于 2013-08-05T11:51:42.793 に答える