Элемент модели, переданный в словарь, имеет тип ... но для этого словаря требуется элемент модели типа - PullRequest
1 голос
/ 11 июля 2011

Я новичок в изучении MVC3 и столкнулся с проблемой.

Я редактирую свой основной вид и хочу, чтобы поля входа отображались на каждой странице, когда пользователь не вошел в систему. Я сделал это с помощью этого кода:

@if (Request.IsAuthenticated)
        {
<text>Welcome <strong>@User.Identity.Name</strong>!
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
        }
        else
        {
           Html.RenderPartial("../Account/LogOn");
        }

Это работает при переходе к моему обычному методу Index HomeController.

Однако при переходе к методу Index моего NewsController я получаю следующую ошибку:

Элемент модели, передаваемый в словарь, имеет тип 'System.Collections.Generic.List`1 [LeagueSite.Models.News]', но для этого словаря требуется элемент модели типа 'LeagueSite.Models.LogOnModel'.

Я понимаю, в чем проблема, но на самом деле не знаю ее решения.

Представление LogOn выглядит следующим образом (стандартное представление входа MVC3):

@model LeagueSite.Models.LogOnModel

@{
    ViewBag.Title = "Log On";
}

<h2>Login</h2>
<p>
    Please enter your user name and password. @Html.ActionLink("Register", "Register") if you don't have an account.
</p>

<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>

@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")

@using (Html.BeginForm()) {
    <div>
        <fieldset>
            <legend>Account Information</legend>

            <div class="editor-label">
                @Html.LabelFor(m => m.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </div>

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

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

            <p>
                <input type="submit" value="Log On" />
            </p>
        </fieldset>
</div>

} `

Какие-нибудь советы / идеи?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Я думаю, что с вашим представлением "новости" уже связана модель.может быть, это начинается следующим образом?.News ", что, конечно, не то, что вы хотите.Вы должны передать LogOnModel вашему частичному представлению LogOn следующим образом:

 Html.RenderPartial("../Account/LogOn", Model.ObjLogonModel);

это предполагает, что у вас есть экземпляр LogonModel в вашей модели "News".тогда вы сможете обрабатывать действия входа в систему

1 голос
/ 11 июля 2011

Быстро и грязно: вместо Html.RenderPartial используйте Html.RenderAction:

Html.RenderAction("LogOn", "Account");

и в действии LogOn контроллера Account верните PartialView, иначе вы получитепереполнение стека и сбой Кассини:

public ActionResult LogOn()
{
    return PartialView();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...