MVC视图/表单没有回发给自己

时间:2012-12-18 13:06:17

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我已用更多信息更新了问题。

我有这样的观点(简化版):

@using (Html.BeginForm())
        {
            @Html.ValidationSummary(false)

            <fieldset>
                <div class="editor-label">
                    @Html.LabelFor(model => model.UserName)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.UserName)
                    @Html.ValidationMessageFor(model => model.UserName)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.Password)
                </div>
                <div class="editor-field">
                    @Html.PasswordFor(model => model.Password)
                    @Html.ValidationMessageFor(model => model.Password)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.RememberMe)
                </div>
                <div class="editor-field">
                    @Html.CheckBoxFor(model => model.RememberMe)
                </div>

                <input type="image" src="@Url.Content("~/Images/login_button.png")" alt="Login" />

            </fieldset>
        }

突然,虽然在过去的3个小时内整合了很多其他代码,但我刚才注意到我的视图已停止导致后期/后退。这是一个简单的登录表单。

我看到这里没有提交类型。但我想知道它早些时候是如何回归自己的​​。 我应该改变什么?

更新

我刚刚意识到它没有回发到索引(httpPost),因为我在同一个控制器中有一个CheckUserName远程验证。当我删除远程验证时,它可以工作。如果我把它介绍回来,它就不会。这是我的远程验证。

[AllowAnonymous]
public JsonResult CheckUserName(string userName)
{
    using (var context = new Presentation.Models.PMSEntities())
    {
        context.ContextOptions.LazyLoadingEnabled = false;

        Func<User, bool> predicate = u => u.UserName.SameAs(userName) && u.Status.SameAs("Active");

        return Json(context.Users.Any(predicate), JsonRequestBehavior.AllowGet);
    }
}

我在相应的字段上设置了RemoteAttribute

3 个答案:

答案 0 :(得分:0)

试试这个

你可以在Action方法上使用[HttpPost]来处理简单表格

您可以在上传文件或处理复杂表单时尝试此操作

@ Html.BeginForm(“Action”,“Controller”,new {SearchModel = Model},FormMethod.Post)

答案 1 :(得分:0)

带有input

type="image"充当提交按钮。您缺少src属性的引号 - @Url.Content会返回不带引号的网址,因此请尝试添加它们。

答案 2 :(得分:0)

调用Html.BeginForm()会创建一个<form> POST,以发布当前操作。 您需要将操作名称传递给BeginForm

例如:

    @using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post))
    {
    }