39

我有一个基本表单,我想通过调用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();
}
4

2 回答 2

88

您使用 HTML Helper 并拥有

    @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的表单。举个例子,假设你有一个控制器调用和一个动作调用PostsDelete

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")
}
于 2013-03-03T21:16:05.837 回答
1

在这里,我基本上是在链接中包装了一个按钮。优点是您可以以相同的形式发布到不同的操作方法。

<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/ActionMethod?userName=@Model.UserName">
    <input type="button" value="Click Me" />
</a>

您也可以对枚举模型执行相同的操作。您只需要先引用一个实体。快乐编码!

于 2015-08-13T15:34:49.757 回答