Asp.net MVC - 的HTML提交按钮与后发? [英] Asp.net mvc - Html Submit button not sent with post?

查看:80
本文介绍了Asp.net MVC - 的HTML提交按钮与后发?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如在标题中。我使用方法允许多个提交按钮每个表单和一个以上的行动来处理它们。

然而 - 一些奇怪的原因 - 突然我的提交按钮不会与表单提交!?任何理由为什么会发生?

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

查看code:

 <%@页标题=LANGUAGE =C#的MasterPageFile =〜/查看/共享/的Site.Master继承=System.Web.Mvc.ViewPage< Setup.Mvc.ViewModels.SignUpViewModel>中%GT;< ASP:内容ID =内容1ContentPlaceHolderID =TitleContent=服务器>
    注册
< / ASP:内容>
< ASP:内容ID =内容2ContentPlaceHolderID =日程地址搜索Maincontent=服务器>
    <使用(Html.BeginForm(注册,设置,FormMethod.Post))%
       {    %GT;
    <%:Html.ValidationSummary()%GT;
    <按钮式=提交值=注册NAME =ActionRegister>注册< /按钮>
    <按钮式=提交值=取消NAME =ActionCancel级=取消>取消< /按钮>
    <&字段集GT;
        <传奇>帐户信息与LT; /传说>
        < D​​L>
            < D​​T>
                <%:Html.LabelFor(X => x.UserName)%GT;
            < / DT>
            < D​​D>
                <%:Html.TextBoxFor(X => x.UserName)%GT;
                <%:Html.ValidationMessageFor(型号=> model.UserName)%GT;
            < / DD>
            <如果%(string.IsNullOrEmpty(Model.Provider))
               {
            %GT;
            < D​​T>
                <%:Html.LabelFor(X => x.Password)%GT;
            < / DT>
            < D​​D>
                <%:Html.PasswordFor(X => x.Password)%GT;
                <%:Html.ValidationMessageFor(型号=> model.Password)%GT;
            < / DD>
            <%
               }%GT;
            < D​​T>
                <%:Html.LabelFor(X => x.Email)%GT;
            < / DT>
            < D​​D>
                <%:Html.TextBoxFor(X => x.Email)%GT;
                <%:Html.ValidationMessageFor(型号=> model.Email)%GT;
            < / DD>
            < D​​T>
                <%:Html.LabelFor(X => x.Themes)%GT;
            < / DT>
            < D​​D>
                <%:Html.DropDownList(的ThemeID,Model.Themes.Select(X =>新建SelectListItem的{text = x.DisplayName,值= x.DisplayName}),选择一个主题)%>
                <%:Html.ValidationMessageFor(型号=> model.Themes)%GT;
            < / DD>
        < / DL>
    < /字段集>
    <&字段集GT;
        <传奇>
            < H2>
                附加信息与LT; / H>
        < /传说>
        < D​​L>
            < D​​T>
                <%:Html.LabelFor(X => x.PublicSite)%GT;
            < / DT>
            < D​​D>
                <%:Html.CheckBoxFor(X => x.PublicSite)%GT;
                <%:Html.ValidationMessageFor(型号=> model.PublicSite)%GT;
            < / DD>
            < D​​T>
                <%:Html.LabelFor(X => x.SiteUrl)%GT;
            < / DT>
            < D​​D>
                http://cheesyurl.com/<%:Html.TextBoxFor(x =&GT; x.SiteUrl)%GT;
                &LT;%:Html.ValidationMessageFor(型号=&GT; model.SiteUrl)%GT;
            &LT; / DD&GT;
        &LT; / DL&GT;
    &LT; /字段集&GT;
    &LT;%
       }%GT;
&LT; / ASP:内容&GT;

动作:

  [HttpPost]
    [ActionName(注册)]
    [的UnitOfWork]
    [AcceptParameter(ACTION =ActionRegister)]
    公众的ActionResult SignUp_Register(SignUpViewModel VM)
    {
        返回查看();
    }

我试着从提交按钮更改它和它的工作对所有的2职位,然后停下来?!

我完全失去了理由......我打赌我正在做soemthing完全傻...

从萤火虫POST输出:

  Parametersapplication / X WWW的形式,urlen codeD
电子邮件wayne@isit.gd
密码sdfsdfsdfsdf
PublicSite假
SITEURL sdfsdfsdf
的ThemeID
用户名用户名-12131
资源
内容类型:应用程序/ x-WWW的形式urlen codeD的Content-Length:112 UserName=Usernames-Sux0r&Password=sdfsdfsdfsdf&Email=wayne%40isit.gd&ThemeId=&PublicSite=false&SiteUrl=sdfsdfsdf


解决方案

你有没有设置名称输入?

表单域不会被发送,除非你指定name属性。

 &LT;输入类型=提交名称=删除价值=删除/&GT;
&LT;输入类型=提交名称=编辑VALUE =删除/&GT;

编辑:我看到你正在使用的按钮,而不是提交。这可能是问题所在。

您需要有这样的使用输入:

 &LT;输入类型=提交值=注册NAME =ActionRegister/&GT;
&LT;输入类型=提交值=取消NAME =ActionCancel级=取消/&GT;

As in the title. I use this method for allowing more than one submit button per form and more than one action to handle them.

However - for some odd reason - all of a sudden my submit button doesn't get submitted with the form!? any reason why that would happen?

tested using IE, FF, Chrome - all latest

View code:

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

Action:

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

I tried changing it from submit to button and it worked for all of 2 posts and then stopped?!

i'm completely lost for reasons... i bet i'm doing soemthing completely stupid...

Post output from firebug:

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

解决方案

Have you set the name on the input?

Form fields don't get sent unless you specify the "name" attribute.

<input type="submit" name="Delete" value="Delete" />
<input type="submit" name="Edit" value="Delete" />

EDIT: I see you're using buttons rather than submit. Which might be the problem.

You need to have use inputs like this:

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

这篇关于Asp.net MVC - 的HTML提交按钮与后发?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆