ASP.NET MVC使用带有Html.BeginForm的两个输入

Kla*_*Nji 4 asp.net-mvc

是否有可能有两个输入或按钮控件,在绑定到Html.BeginForm的同一控制器中触发两个不同的操作?

在以下示例中,我希望Subscribe输入在控制器上调用Subscribe action.这很好用.我希望取消订阅输入来调用我的取消订阅操作.我该如何实现这一目标?TIA.

<% using (Html.BeginForm("Subscribe", "NewsLetter"))
    {%>    
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.EmailAdress) %>
            <%= Html.ValidationMessageFor(
                model => model.EmailAdress) %>                                
        </div>                        
        <div >
            <input type="submit" class="submit" value="Subscribe" />
            <input type="submit" class="submit" value="Unsubscribe" />
        </div>         
<% } %>
Run Code Online (Sandbox Code Playgroud)

更新:

这个问题的更多背景:

我的NewsLetterController有两个订阅订阅和取消订阅,如下所示:

public class NewsLetterController : Controller
    {      
        [HttpPost]
        public ActionResult Subscribe(NewsletterSubscriber subscriber)
        {
           // do something

        }

        [HttpPost]
        public ActionResult Unsubscribe(NewsletterSubscriber subscriber)
        {
            // do something
        }
Run Code Online (Sandbox Code Playgroud)

我希望我可以从同一个Form元素中调用每个动作,但这显然是错误的.我如何仍然维护MVC模式,但如果可能,避免编写脚本?发布的HTML是主页上呈现的局部视图的一部分.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl
                                   <AkwiMemorial.Models.NewsletterSubscriber>" %>

   <h2><strong>Newsletter</strong></h2>
    <legend>Enter your email</legend>

    <% using (Html.BeginForm("Subscribe", "NewsLetter"))
       {%>    
            <div class="editor-field">
                <%= Html.TextBoxFor(model => model.EmailAdress) %>
                <%= Html.ValidationMessageFor(model => model.EmailAdress) %>
            </div>                        
           <div >
             <input type="submit" class="submit" name="sub" 
                    value="Subscribe" />
              <input type="submit" class="submit" name="unsub" 
                     value="Unsubscribe" />
            </div>         
    <% } %>
Run Code Online (Sandbox Code Playgroud)

Cra*_*ntz 8

HTML form元素只有一个action.因此,除非您的按钮使用JavaScript进行更改,否则每个表单只会获得一个URI.您是否希望您的网站仅支持JavaScript?

另一个选择是给按钮a name,在这种情况下,你将获得value发布表单的一部分,例如:

<input type="submit" class="submit" name="newsletter" value="Subscribe" />
<input type="submit" class="submit" name="newsletter" value="Unsubscribe />
Run Code Online (Sandbox Code Playgroud)

然后你可以有一个动作来检查值,例如:

public ActionResult Subscribe(string newsletter)
{
    if ("subscribe".Equals(newsletter, StringComparison.OrdinalIgnoreCase))
    {
        //...
Run Code Online (Sandbox Code Playgroud)

因为newsletter是发布表单中的键,MVC会将其值绑定到操作的参数.