Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 为什么调用Http Get操作而不是Http post操作?_Asp.net Mvc_Razor_Http Post_Form Submit_Submit Button - Fatal编程技术网

Asp.net mvc 为什么调用Http Get操作而不是Http post操作?

Asp.net mvc 为什么调用Http Get操作而不是Http post操作?,asp.net-mvc,razor,http-post,form-submit,submit-button,Asp.net Mvc,Razor,Http Post,Form Submit,Submit Button,我和MVC一起工作,花了一整天的时间来解决这个问题。以下是控制器上的代码: public class CMController : Controller { public ActionResult SignUp() { return View("SignUpPage"); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult SignUp(User u)

我和MVC一起工作,花了一整天的时间来解决这个问题。以下是控制器上的代码:

public class CMController : Controller
{   
    public ActionResult SignUp()
    {
        return View("SignUpPage");
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult SignUp(User u)
    {
        if (ModelState.IsValid)
        {
            using (CmdbEntities dc = new CmdbEntities())
            {
                dc.Users.Add(u);
                dc.SaveChanges();
                ModelState.Clear();
                u = null;
                ViewBag.Message = ("Successfully sign on");
            }
        }
        else
        {
            ViewBag.Message = ("Error");
        }
        return View("Welcome");
    }

}
以下是SignUpPage.cshtml视图:

@using (Html.BeginForm("SignUp", "CM", FormMethod.Post))
    {  
        @Html.AntiForgeryToken()
        <div class="form-group" style="padding:5px 50px">
            <label> First name:</label>
            <div>
                @Html.TextBoxFor(model => model.FirstName, new {@class="form-control", placeholder="Enter first name", ID="FirstName"})
            </div>
        </div>
        <div class="form-group" style="padding:5px 50px">
            <label >Last name:</label>
            <div>
                @Html.TextBoxFor(model => model.LastName, new {@class="form-control", placeholder="Enter first name", ID="LastName"})
            </div>
        </div>
        <div class="form-group"  style="padding:5px 50px">
            <label for="email">Email:</label>
            <div>
                @Html.TextBoxFor(model => model.Email, new {@class="form-control", placeholder="Enter email", ID="Email", type="email"})
            </div>
        </div>
        <div class="form-group"  style="padding:5px 50px">
            <label >User name:</label>
            <div>
                @Html.TextBoxFor(model => model.UserName, new {@class="form-control", placeholder="Enter user name", ID="UserName"})
            </div>

        </div>
        <div class="form-group"  style="padding:5px 50px">
            <label for="pwd">Password:</label>
            <div>
                @Html.TextBoxFor(model => model.Password, new {@class="form-control", placeholder="Enter password", ID="Password", type="password"})
            </div>
        </div>
        <div class="form-group"  style="padding:5px 50px">
            <label for="pwd">Confirm password:</label>
            <div>
                @Html.TextBoxFor(model => model.ConfirmPassword, new {@class="form-control", placeholder="Re-enter password", ID="_password", type="password"})
            </div>
        </div>
        <div class="form-group"  style="padding:5px 50px">
            <div>
                <input type="submit" ID="SignUp" class="btn btn-success" value="Sign Up" />
            </div>
        </div>
    }
@使用(Html.BeginForm(“SignUp”、“CM”、FormMethod.Post))
{  
@Html.AntiForgeryToken()
名字:
@Html.TextBoxFor(model=>model.FirstName,新的{@class=“form control”,placeholder=“Enter first name”,ID=“FirstName”})
姓氏:
@Html.TextBoxFor(model=>model.LastName,新的{@class=“form control”,placeholder=“Enter first name”,ID=“LastName”})
电邮:
@Html.TextBoxFor(model=>model.Email,新的{@class=“form control”,placeholder=“Enter Email”,ID=“Email”,type=“Email”})
用户名:
@Html.TextBoxFor(model=>model.UserName,新的{@class=“form control”,placeholder=“Enter user name”,ID=“UserName”})
密码:
@Html.TextBoxFor(model=>model.Password,新的{@class=“form control”,placeholder=“Enter Password”,ID=“Password”,type=“Password”})
确认密码:
@Html.TextBoxFor(model=>model.ConfirmPassword,新的{@class=“form control”,placeholder=“重新输入密码”,ID=“\u password”,type=“password”})
}
问题是,当第一次加载页面时,会调用正确的操作SignUp()。但是在提交表单时,会再次调用SignUp(),而不是post-action-SignUp(用户u)

还有一个问题,即使表单有post方法,当单击submit时,url也会像get方法一样包含输入信息,我不明白

下面是表单标签的页面html源代码

<form action="/CM/SignUp" method="post"><input name="__RequestVerificationToken" type="hidden" value="VJ0YcQr1Z-l3Qo717pRpZNT-QtL59G2EJXy2JQL8NFnOm-XoNnAD-8T-Itz3i1EboGj0bhpBf2G26ifxm4F5ZRyKimkOyZW1AxZ3ckPNuRk1" />

请帮助,谢谢。

请尝试添加 [异名]

去邮局的方法

您是否在任何地方激活了全局授权 System.Web.Mvc.AuthorizeAttribute

您是否考虑过为第一个
SignUp()
操作添加
[HttpGet]
属性,其背后的理论是ASP.Net的路由将根据使用的方法知道调用哪个操作方法。如果您检查了呈现的HTML,这是您所期望的吗?@chridam如果您没有指定该方法,这是我能应付的default@Levesque是的,html是find,特别是表单标签有post-method的操作。这对我来说似乎很困惑,所以我创建了一个新项目,并使用您的控制器和视图来测试它。它像预期的那样工作。在你的情况下还发生了其他事情。可以尝试的一件事是使用像Fiddler这样的工具来确保表单实际发回了所有信息。如果模型绑定由于某种原因失败,这可能解释了为什么它选择了无参数版本的注册。