Asp.net mvc - Html提交按钮未发送帖子?

时间:2011-04-14 12:41:20

标签: html asp.net-mvc

如标题所示。我使用this方法为每个表单允许多个提交按钮,并使用多个操作来处​​理它们。

然而 - 由于一些奇怪的原因 - 突然间我的提交按钮没有提交表格!?这会发生什么原因?

使用IE,FF,Chrome测试 - 所有最新的

查看代码:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Setup.Mvc.ViewModels.SignUpViewModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    SignUp
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% using (Html.BeginForm("SignUp", "SetUp", FormMethod.Post))
       {

    %>
    <%: Html.ValidationSummary()%>
    <button  type="submit" value="Register" name="ActionRegister" >Register</button>
    <button  type="submit" value="Cancel" name="ActionCancel" class="cancel" >Cancel</button>
    <fieldset>
        <legend>Account Information </legend>
        <dl>
            <dt>
                <%:Html.LabelFor(x=>x.UserName)%>
            </dt>
            <dd>
                <%: Html.TextBoxFor(x=>x.UserName) %>
                <%: Html.ValidationMessageFor(model => model.UserName) %>
            </dd>
            <% if (string.IsNullOrEmpty(Model.Provider))
               {    
            %>
            <dt>
                <%:Html.LabelFor(x=>x.Password)%>
            </dt>
            <dd>
                <%: Html.PasswordFor(x => x.Password)%>
                <%: Html.ValidationMessageFor(model => model.Password) %>
            </dd>
            <%
               } %>
            <dt>
                <%:Html.LabelFor(x=>x.Email)%>
            </dt>
            <dd>
                <%: Html.TextBoxFor(x=>x.Email) %>
                <%: Html.ValidationMessageFor(model => model.Email) %>
            </dd>
            <dt>
                <%:Html.LabelFor(x=>x.Themes) %>
            </dt>
            <dd>
                <%: Html.DropDownList("ThemeId", Model.Themes.Select(x=> new SelectListItem{ Text = x.DisplayName, Value = x.DisplayName}), "Select a Theme") %>
                <%: Html.ValidationMessageFor(model => model.Themes) %>
            </dd>
        </dl>
    </fieldset>
    <fieldset>
        <legend>
            <h2>
                Additional Information</h2>
        </legend>
        <dl>
            <dt>
                <%:Html.LabelFor(x=>x.PublicSite)%>
            </dt>
            <dd>
                <%:Html.CheckBoxFor(x => x.PublicSite)%>
                <%: Html.ValidationMessageFor(model => model.PublicSite) %>
            </dd>
            <dt>
                <%:Html.LabelFor(x=>x.SiteUrl)%>
            </dt>
            <dd>
                http://cheesyurl.com/<%:Html.TextBoxFor(x => x.SiteUrl)%>
                <%: Html.ValidationMessageFor(model => model.SiteUrl) %>
            </dd>
        </dl>
    </fieldset>
    <%
       }%>
</asp:Content>

动作:

    [HttpPost]
    [ActionName("SignUp")]
    [UnitOfWork]
    [AcceptParameter(Action = "ActionRegister")]
    public ActionResult SignUp_Register(SignUpViewModel vm)
    {
        return View();
    }

我尝试将其从提交更改为按钮,它适用于所有2个帖子,然后停止了?!

我因为某些原因完全迷失了...我打赌我做的事情完全是愚蠢的......

来自萤火虫的后期输出:

Parametersapplication/x-www-form-urlencoded
Email   wayne@isit.gd
Password    sdfsdfsdfsdf
PublicSite  false
SiteUrl sdfsdfsdf
ThemeId 
UserName    Usernames-12131
Source
Content-Type: application/x-www-form-urlencoded Content-Length: 112 UserName=Usernames-Sux0r&Password=sdfsdfsdfsdf&Email=wayne%40isit.gd&ThemeId=&PublicSite=false&SiteUrl=sdfsdfsdf

4 个答案:

答案 0 :(得分:10)

您是否在输入上设置了名称?

除非您指定“name”属性,否则不会发送表单字段。

<input type="submit" name="Delete" value="Delete" />
<input type="submit" name="Edit" value="Delete" />
编辑:我看到你正在使用按钮而不是提交。这可能是问题所在。

你需要使用这样的输入:

<input  type="submit" value="Register" name="ActionRegister"/>
<input  type="submit" value="Cancel" name="ActionCancel" class="cancel" />

答案 1 :(得分:4)

之前我这样做的方式是将表单发布到同一个动作。 在我的操作中,我检查输入按钮的值。

所以在你的情况下,你应该对你的视图进行跟踪。 保持两个输入的名称提交相同但不同的值。

<% using (Html.BeginForm("SignUp", "SetUp", FormMethod.Post))
{%>
<%: Html.ValidationSummary()%>
     <input type="submit" value="Register" name="actionName" />
     <input  type="submit" value="Cancel" name="actionName" class="cancel">Cancel</input>
}

在您的控制器上

public ActionResult SignUp_Register(SignUpViewModel vm,string actionName)
{
    if(actionName =="Register")
          //Do something;
    if(actionName =="Cancel")
          //Do something;

    return View();
}

在标准情况下,这些应该有效....

让我突出一些有趣的事情...... !!

1)如果您在JavaScript中禁用所有输入类型的提交以禁用双重提交,则在提交表单事件时,您将始终在控制器中为它们获取空值,因为它们已被禁用。

2)我意识到你已经取消了你的提交课程,这有一些意想不到的行为 如果您正在使用jQuery验证。 参考:http://docs.jquery.com/Plugins/Validation/Reference

希望这会有所帮助.. !!

答案 2 :(得分:2)

此:

<button  type="submit" value="Register" name="ActionRegister" >Register</button>
<button  type="submit" value="Cancel" name="ActionCancel" class="cancel" >Cancel</button>

似乎工作?!跆拳道?

答案 3 :(得分:0)

您需要设置相等的按钮ID(View)和要接收的变量的名称(Controller) 该按钮的值将被发送到变量

    <button type="submit" id="btnRegister" name="btn" class="btn btn-primary" value="Register">
        Register
    </button>
    <button type="submit" id="btnCancel" name="btn" class="btn btn-primary" value="Cancel">
        Cancel
    </button>

你的控制器:

    [HttpPost]
    public ActionResult SignUp_Register(string btn, SignUpViewModel vm m)

变量btn将是&#34;寄存器&#34;或&#34;保存&#34;取决于点击的按钮