0

同じビューに複数のボタンを配置する必要がありますが、何らかの理由で機能しません。私はすでに同じ質問を見ましたが、解決策はありません。

ビューでどのボタンが実行されているかを知るにはどうすればよいですか?

意見:

<%@ Page Title="" Language="C#" MasterPageFile="~/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<LIASWeb.Models.Publication>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>NewPublication</h2>

    <% using (Html.BeginForm())
       { %>
    <div>
        <fieldset>
            <p>
                <label for="Name">Naam:</label>
                <%: Html.TextBoxFor(m => Model.nmPublication) %>
            </p>
            <p>
                 <%: Html.TextBox("Search", "type naam")%>
                <input type="submit" name="btnSearch" value="Zoeken" />
            </p>
            <p>
                <input type="submit" name="btnSave" value="Opslaan" />
            </p>
        </fieldset>
    </div>
    <% } %>
</asp:Content>

コントローラ:

public class PublicationController : Controller
{
    private Repository repository = null;

    public PublicationController()
    {
        repository = new Repository();
    }

    public ActionResult NewPublication(String button)
    {
        if (button == "btnSave")
            // perform save action

            if (button == "btnSearch")
            // perform save action

        return View();
    }

    public ActionResult Index()
    {
        IEnumerable<Publication> model = repository.Publications;
        return View(model);

}

ルーティング:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Publication", action = "Index", id = UrlParameter.Optional }
        );
}
4

5 に答える 5

0

このソリューションを試してください:

public ActionResult NewPublication(string btnSearch)
{
    if (!string.IsNullOrEmpty(btnSearch))
    {
        //btnSearch was clicked
    }
    else
    {
        //btnSave was clicked
    }
}

このスレッドもチェックしてください

それが役に立てば幸い。

于 2013-01-10T12:25:43.943 に答える
0

これは私が以前にウィザードのようなビューに対して行ったことであり、それは可能ですが、あなたのアプローチがうまくいくとは思いません。

代わりに、この投稿に基づいた、私が使用したソリューションを試すことをお勧めします

また、送信にフォーム要素を使用せず、jQuery/Javascriptを使用してフォームを送信することもできます。

于 2013-01-10T11:15:11.700 に答える
0

この問題には本当に多くの解決策があります。

オプション1-

これに似たものがあります(コードが正しいかどうかはチェックしていませんので、ご容赦ください):

@using (Html.BeginForm("Controller", "Action1", FormMethod.Post, new { id="MyForm1"}))
{
   <button type="submit" id="btn1">Bt1</button>
}

@using (Html.BeginForm("Controller", "Action2", FormMethod.Post, new { id="MyForm2"}))
{
   <button type="submit" id="btn2">Bt2</button>
}

そして今、あなたはuがそれらを明確にプログラムすることができる2つの異なるアクションを指しています、そしてあなたはまだそれらView("SameViewForBothForms")を「MainView」へのリダイレクトでまたはで返すことができます

オプション2-2つのボタンを持つ1つのフォームのみ>送信タイプではなく、単純なボタン。非表示フィールド「buttonName」の値を変更するJavascript関数があります(JS関数ではこの値を変更します)。

オプション3- 複数または単一の形式の任意の種類の混合が可能です。

于 2013-01-10T11:26:30.813 に答える
0

1 つのフォームで 1 つの送信ボタンを使用する必要があります。

異なるコントローラーメソッドの異なるフォームは、私見の最良の方法です

于 2013-01-10T10:47:27.947 に答える