Список продуктов ASP.NET MVC 3 с частичной страницей входа

Я новый пользователь MVC 3, и я пытаюсь разработать веб-сайт электронной коммерции. Когда я создал список продуктов с использованием модели продукта, я не могу поместить частичную страницу входа в систему, потому что я также использую модель клиента на странице logOnPartial.

В нем есть ошибки «Элемент модели, переданный в словарь, имеет тип «System.Collections.Generic.List`1 [MvcApplication2.Models.Product]», но для этого словаря требуется элемент модели типа «MvcApplication2.Models.Customer». .

Я понимаю, что это значит. Однако я не знаю, как отображать частичную страницу входа со списком продуктов на странице? Является ли это возможным? Я даю вам свой код. Что мне делать? Спасибо за чтение.

//mac.cshtml page

@model IEnumerable<MvcApplication2.Models.Product>

<div id="border_frame">
@Html.Partial("_LogOnPartial")
</div>

В настоящее время я использую модели клиентов на странице logOnPartial.

//logOnPartial.cshtml page
@model MvcApplication2.Models.Customer

@if (Request.IsAuthenticated)
{
<text>Welcome <strong>@User.Identity.Name</strong>!
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text><br />
}
else
{
<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>

using (Html.BeginForm())
{
    <div>
    @Html.LabelFor(m => m.userName)

    @Html.TextBoxFor(m => m.userName, new { style = "width:150px;" })
    @Html.ValidationMessageFor(m => m.userName)

    @Html.LabelFor(m => m.password)

    @Html.PasswordFor(m => m.password, new { style = "width:150px;" })
    @Html.ValidationMessageFor(m => m.password) 

    @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
    </div>
    <input type="submit" class="login_button" value="Log in"/>
    @Html.ActionLink("Register now", "Register", "Account", null, new { @class = "register_button" });

}

}


person wholee1    schedule 15.03.2012    source источник


Ответы (1)


@Html.Partial("_LogOnPartial", <You need to pass an instance of Customer here>)

Вы пытаетесь отобразить представление _LogOnPartial, для которого в качестве модели требуется экземпляр Customer. Поскольку вы не передаете какой-либо объект явно (есть переопределение Partial, которое принимает модель), передается вся существующая модель (IEnumerable<MvcApplication2.Models.Product> ). Это недопустимая модель для вашего частичного представления, отсюда и ошибка.

Я бы посоветовал вам изменить модель для представления Mac с IEnumerable<Product> на новый класс модели представления.

class ProductsViewModel
{
    public IEnumerable<Product> Products { get; set; }
    public Customer Customer { get; set; }
}

а затем вы можете передать своего клиента частичному просмотру

@Html.Partial("_LogOnPartial", Model.Customer)
person Jakub Konecki    schedule 15.03.2012
comment
Тогда я не могу просмотреть пользователя _LogonPartial в списке продуктов? как я могу передать экземпляр клиента? Извините, я новичок в MVC, тогда не могли бы вы объяснить немного больше о некоторых практиках? - person wholee1; 15.03.2012