визуализировать частичное представление в строку - PullRequest
1 голос
/ 01 марта 2012

У меня есть форма входа в систему, которая отображается на всех страницах моего сайта mvc и просит пользователя войти в систему или показывает приветственное сообщение, если они уже вошли в систему вместе с различными данными учетной записи (логотип компании и т. Д.), У меня нет сама страница входа в систему все вход в систему обрабатывается через этот «виджет»

Для реализации этого у меня есть следующее

В моем основном макете

<div id="top_right">
    @{ Html.Partial("_LogOnPartial");}
</div>

_LogOnPartial.cshtml

@if (Request.IsAuthenticated)
{
    // TODO: show company logo
    Html.RenderAction("Details", "Account");

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

Контроллер аккаунта

public class AccountController : Controller
{
    public PartialViewResult LogOn()
    {
        return PartialView();
    }

    [HttpPost]
    public ActionResult LogOn(LogOnModel userDetails, string returnUrl)
    {
        //TODO: validate user here

        if(ModelState.IsValid)
        {
            if(Membership.ValidateUser(userDetails.UserName, userDetails.Password))
            {
                FormsAuthentication.SetAuthCookie(userDetails.UserName, userDetails.RememberMe);

                return Redirect(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "The username or password provided was incorrect");
            }
        }

        return PartialView(userDetails);

    }

    public PartialViewResult Details()
    {
        //TODO: query membership for user information

        var user = new UserDetailsViewModel();


        return PartialView(user);
    }
}

}

LogOn.cshtml

@model LogOnModel

 <div id="login">
        @Html.ValidationSummary()

        <h2>Start by Loggin in</h2>

        @using (Html.BeginForm("LogOn", "Account"))
        {
            @Html.Hidden("returnUrl", Request.Url.PathAndQuery)

            <table width="100%" border="0" cellspacing="0" cellpadding="5">
                <tr>
                    <td>
                        <span class="bluey">Username:</span><br />
                        @Html.TextBoxFor(m => m.UserName,new {tabindex="1", Class = "field"})
                        @Html.ValidationMessageFor(m => m.UserName, "*")
                    </td>
                    <td>
                        <span class="bluey">Password:</span><br />
                        @Html.TextBoxFor(m => m.Password, new {tabindex = "2", Class="field"})
                        @Html.ValidationMessageFor(m=> m.Password, "*")
                    </td>
                </tr>
                <tr>
                    <td>
                        <input name="login" type="submit" value="Submit" class="input_btn" tabindex="3" />
                    </td>
                    <td>@Html.CheckBoxFor(m=>m.RememberMe) @Html.LabelFor(m=> m.RememberMe) <span class="bluey">&nbsp; | &nbsp;</span> @Html.ActionLink("Forgot Password?", "Password", "User")></td>
                </tr>
            </table>
        }
    </div>

Я прочитал несколько сообщений, и, похоже, мне нужно будет изменить свой LogOn.cshtml, чтобы использовать jquery для создания сообщения, с помощью метода действия / Account / LogOn, а затем обновить html сообщения об успехе или неудаче div. .

Я видел, как это было сделано с помощью пользовательского RenderPartialViewToString , но кто-то также рекомендовал, чтобы было достаточно возврата Partial из Action, и это будет правильно обрабатываться через код jquery, заменяя div (или любой другой элемент) с новым html.

Я также видел пример, возвращающий Json (модель), но я не уверен, вернет ли это реальное представление или только данные модели, закодированные как json

Являются ли оба эти подхода жизнеспособными или есть лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...