2011-04-14 77 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值可以是 「寄存器」 或 「保存」,這取決於按鈕卡嗒一聲