【问题标题】:Asp.net mvc - Html Submit button not sent with post?Asp.net mvc - Html 提交按钮未随帖子发送?
【发布时间】:2011-04-14 12:41:19
【问题描述】:

如标题所示。我使用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

【问题讨论】:

    标签: html asp.net-mvc


    【解决方案1】:

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

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

    <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" />
    

    【讨论】:

    • 太奇怪了——我不知道为什么会这样:(
    • 如果我省略了第一次提交 - 并添加另一个 - 它可以工作...... arrr headfry
    • 按钮和提交有同样的问题 - 如果我删除第一个提交并输入一个新的,它可以工作......非常奇怪
    【解决方案2】:

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

    所以在您的情况下,您应该在您的视图上执行以下操作。 保持两个输入提交的名称相同但值不同。

    <% 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

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

    【讨论】:

    • 哇,伙计!你的第一个亮点为我节省了一些时间。事实上,我有一些阻止双重提交的 javascript。干得好,谢谢!
    • 我几乎忽略了这个 SO 问题,因为它已有 10 多年的历史,但幸运的是,您的第一个亮点也引导我解决了我遇到的问题 - javascript 防止双击。谢谢!
    【解决方案3】:

    这个:

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

    似乎有效?!什么鬼?

    【讨论】:

    • 我现在也在经历同样的怪事,7 年过去了。
    【解决方案4】:

    您需要将按钮的 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 将是“注册”或“保存”

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2014-11-10
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多