2011-04-14 44 views
9

正如标题中所示。我使用this方法允许每个表单提供多个提交按钮,并使用多个操作来处​​理它们。Asp.net mvc - Html提交按钮不发送邮件?

但是 - 由于某种奇怪的原因 - 突然间我的提交按钮没有被提交到表单中!?为什么会发生这种情况?

使用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个职位,然后停下来?!从萤火虫

我完全失去了原因......我敢打赌,我正在做soemthing完全傻了

输出邮编:

Parametersapplication/x-www-form-urlencoded 
Email [email protected] 
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 

回答

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

iwayneo 2011-04-14 12:44:39

+0

太奇怪了 - 我不知道为什么会发生这种情况:( – iwayneo 2011-04-14 12:44:57

+0

您可以发布您的视图代码和控制器操作? – 2011-04-14 13:02:19

1

此:

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

看起来工作?跆拳道?

3

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

所以在你的情况下,你应该对你的视图做下面的事情。 保持两个输入的名称相同但不同的值。

<% 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)在提交表单的事件,如果你禁用所有输入类型的提交在你的Java脚本禁用双提交,那么你将永远得到它们在控制器中的空值,因为它们被禁用。

2)我意识到,如果您使用的是jQuery验证,那么您的提交中就有一些cancle类,它有一些意想不到的行为 。 Ref:http://docs.jquery.com/Plugins/Validation/Reference

希望这可以帮助.. !!

+0

哇!你的第一个亮点让你省下了一些时间。事实上,我有一些JavaScript,防止双重提交。伟大的工作,thx! – keun 2014-08-21 14:58:40

0

您需要设置等于按钮(视图)的ID和变量名接受(控制器) 按钮的值将被发送到可变

<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值可以是 “寄存器” 或 “保存”,这取决于按钮卡嗒一声