为什么要调用Http获取操作而不是Http post action?

时间:2015-02-09 15:06:52

标签: 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)
    {
        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>
    }

问题是,当第一次加载页面时,调用的行为SignUp()是正确的。但是当提交表单时,会再次调用SignUp()而不是后期操作SignUp(User u)。

还有一个问题,即使表单有post方法,当点击提交url包含输入信息就像get方法一样,我不明白。

以下是表单标记的页面html源代码。

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

请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

你可以尝试添加     [使用AllowAnonymous]

到post方法?

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