Частичный просмотр MVC3 postback не работает? - PullRequest
1 голос
/ 04 августа 2011

У меня есть частичное представление LogOn в AccountController:

    public ActionResult LogOn()
    {
        return PartialView();
    }

    //
    // POST: /Account/LogOn

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (ModelState.IsValid)
            {
                if (MembershipService.ValidateUser(model.UserName, model.Password))
                {
                    FormsService.SignIn(model.UserName, model.RememberMe);
                }
                else
                {
                    ModelState.AddModelError("", Resources.Account.Account.LoginFailureText);
                }
            }
        }

        return PartialView(model);
    }

, я отображаю это частичное в моем _Layout.cshtml с:

@{Html.RenderAction("LogOn", "Account");}

, а представление LogOn.cshtml:

@model Kalimat.Web.Models.LogOnModel

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<div class="leftbanner login">
    <div class="bookicon">
        <img src="@Url.Content(@Kalimat.Web.Resources.Common.bookiconImgSrc)" alt="@Kalimat.Web.Resources.Common.bookiconImgAlt" />
    </div>
    <div class="strip">
        @MvcHtmlString.Create(Kalimat.Web.Resources.Account.Account.LoginTitle)
    </div>
    <div class="shade_2">
        <img src="@Url.Content(@Kalimat.Web.Resources.Common.shade_2ImgSrc)" alt="@Kalimat.Web.Resources.Common.shade_2ImgAlt" />
    </div>
    <div class="insidetext">
        @{
            //Logined user view
            if (Request.IsAuthenticated)
            {
                <div id="LoginView1">
                    @{<text>@Kalimat.Web.Resources.Account.Account.WelcomeText <strong>@Model.UserName</strong>!</text>}
                    <br />
                    <a id="LoginStatus1" href="">@Kalimat.Web.Resources.Account.Account.LoginStatusText</a>
                    <a id="ChangePassLinkButton" href="">@Kalimat.Web.Resources.Account.Account.ChangePswText</a>
                </div>
            }
            else
            {
                @Html.LabelFor(m => m.UserName)
                @Html.TextBoxFor(m => m.UserName, new { @class = "inputfield" })
                @Html.ValidationMessageFor(m => m.UserName, "*")
                <br />
                @Html.LabelFor(m => m.Password)
                @Html.PasswordFor(m => m.Password, new { @class = "inputfield" })
                @Html.ValidationMessageFor(m => m.Password, "*")
                <br />
                <span class="remove_shop">
                    @Html.CheckBoxFor(m => m.RememberMe)
                    @Html.LabelFor(m => m.RememberMe)
                </span>
                <p>
                    ***<input type="submit" class="submit_Cart" value="@Kalimat.Web.Resources.Account.Account.LoginButtonText" />***
                </p>
                @Html.ValidationSummary(false, Kalimat.Web.Resources.Account.Account.LoginFailureText)
                <a class="submit_Cart" href="">@Kalimat.Web.Resources.Account.Account.NewAccountText</a>
                <br />
                <a class="submit_Cart" href="">@Kalimat.Web.Resources.Account.Account.RecoverPswText</a>
            }
        }
    </div>
</div>

, когда я запускаю приложение, представление LogOn отображается правильно, но при нажатии на кнопку отправки ничего не происходит.почему?

Ответы [ 3 ]

4 голосов
/ 04 августа 2011

первая остановка, дублирующая эту строку

if (ModelState.IsValid) {}

не имеет смысла ...

как, глядя на ваш код, у вас есть кнопка отправки и все, но я думаю, что вы пропустили

@using(Ajax.BeginForm())
{
     //put all your html element in this
     // and also put submit button in it ...
}

вот параметры для Ajax.BeginForm ():

Ajax.BeginForm(
    string "ActionName",
    string "ControllerName",
    new routevalues {id="IDValue",message="MyMessage"},
    new AjaxOptions {OnBegin=[someFunction], OnFailure=[failureFunction] },
    new { id = "FormName" }
)

это потому, что вы используете ajax для публикации своего действия ...

0 голосов
/ 05 августа 2013

Пожалуйста, проверьте, добавили ли вы какое-либо скрытое поле в форму, которая становится нулевой.Проще говоря, не должно быть ничего, что не требуется для обнуления и публикации как ноль.

Например, я публиковал форму (для создания) со скрытым полем идентификатора (основной), поэтому идентификатор будет нулевым вэкземпляр create, поэтому модель действительна и выглядит как любая вещь, не публикуемая.

0 голосов
/ 04 августа 2011

Я не вижу, есть ли у вас ваш запрос в форме?

Вы должны добавить:

@using(Html.BeginForm("Logon", "Account"))
{
    // Submit form bits here
}

вокруг ваших логинов для отправки информации?

...