ASP.NET MVC 3 список продуктов с частичной страницей входа - PullRequest
1 голос
/ 15 марта 2012

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

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

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

//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" });

}

}

1 Ответ

0 голосов
/ 15 марта 2012
@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)
...