web-dev-qa-db-ja.com

HTML5フォームアクションをASP.NET MVC 4のController ActionResultメソッドにリンクする方法

ビューに関連付けられたActionResultクラスのControllerメソッドを呼び出して、フォーム内のボタンを処理する基本的なフォームがあります。フォームの次のHTML5コードは次のとおりです。

<h2>Welcome</h2>

<div>

    <h3>Login</h3>

    <form method="post" action= <!-- what goes here --> >
        Username: <input type="text" name="username" /> <br />
        Password: <input type="text" name="password" /> <br />
        <input type="submit" value="Login">
        <input type="submit" value="Create Account"/>
    </form>

</div>

<!-- more code ... -->

対応するControllerコードは次のとおりです。

[HttpPost]
public ActionResult MyAction(string input, FormCollection collection)
{
    switch (input)
    {
        case "Login":
            // do some stuff...
            break;
        case "Create Account"
            // do some other stuff...
            break;
    }

    return View();
}
28
dtg

hTMLヘルパーを使用して、

_    @using(Html.BeginForm())
    {
        Username: <input type="text" name="username" /> <br />
        Password: <input type="text" name="password" /> <br />
        <input type="submit" value="Login">
        <input type="submit" value="Create Account"/>
    }
_

または、URLヘルパーを使用します

_<form method="post" action="@Url.Action("MyAction", "MyController")" >
_

_Html.BeginForm_には、いくつかの(13)オーバーライドがあり、詳細を指定できます。たとえば、ファイルのアップロード時の通常の使用では次を使用します。

_@using(Html.BeginForm("myaction", "mycontroller", FormMethod.Post, new {enctype = "multipart/form-data"}))
{
    < ... >
}
_

引数を指定しない場合、Html.BeginForm()は、現在のコントローラーと現在のアクションを指すPOST形式を作成します。例として、PostsというコントローラーとDeleteというアクションがあるとします。

_public ActionResult Delete(int id)
{
   var model = db.GetPostById(id);
   return View(model);
}

[HttpPost]
public ActionResult Delete(int id)
{
    var model = db.GetPostById(id);
    if(model != null) 
        db.DeletePost(id);

    return RedirectToView("Index");
}
_

あなたのhtmlページは次のようになります:

_<h2>Are you sure you want to delete?</h2>
<p>The Post named <strong>@Model.Title</strong> will be deleted.</p>

@using(Html.BeginForm())
{
    <input type="submit" class="btn btn-danger" value="Delete Post"/>
    <text>or</text>
    @Url.ActionLink("go to list", "Index")
}
_
65
balexandre

ここでは、基本的にリンクにボタンをラップしています。利点は、同じフォームで異なるアクションメソッドに投稿できることです。

<a href="Controller/ActionMethod">
    <input type="button" value="Click Me" />
</a>

パラメーターの追加:

<a href="Controller/ActionMethod?userName=ted">
    <input type="button" value="Click Me" />
</a>

非列挙モデルからのパラメーターの追加:

<a href="Controller/[email protected]">
    <input type="button" value="Click Me" />
</a>

列挙型モデルでも同じことができます。最初に単一のエンティティを参照する必要があります。ハッピーコーディング!

0
jade290