Html.DropDownList автоматически добавляет префикс - PullRequest
0 голосов
/ 11 августа 2011

У меня есть следующее частичное представление BuyProduct.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcMusicStore.Models.Product>" %>

<span class="price">Precio: <em><strong><%: Html.Price(Model) %></strong></em></span>

<div class="wrapper">
<% if (Model.Active) { %>
    <% using (Html.BeginForm("AddToCart", "ShoppingCart", new { id = Model.ProductId }, FormMethod.Post, new { id = "addtocart-form" })) {%>

            <% if (Model.MetricType == (int)ProductMetricType.Units) { %>
                <%: Html.DropDownList("Quantity" , new SelectList(DropDownLists.Units , "Value", "Key" , Model.MetricType)) %>
            <% } else { %>
                <%: Html.DropDownList("Quantity", new SelectList(DropDownLists.Kilograms, "Value", "Key", Model.MetricType)) %>
            <% } %>

        <input type="submit" value="Comprar" />
    <% } %>
<% } else { %>
    <span class ="buttonBig">Sin existencias!</span>
<% } %>
</div>

Если я использую его в представлении, имя выпадающего списка остается неизменным, но если я использую его в EditorTemplate, например:

<%@ Import Namespace="MvcMusicStore"%>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcMusicStore.Models.Product>" %>
<li>
    <h3><%: Html.Truncate(Model.Name, 25) %></h3>
    <p><a href="<%: Url.Action("Details", "Store",  new { id = Model.ProductId }) %>"><img alt="<%: Model.Name %>" src="<%: Model.ProductArtUrl %>" width="180" height="165" /></a></p>
    <% Html.RenderPartial("BuyProduct", Model); %>
</li>

Код моего контроллера:

    public ActionResult AddToCart(Guid id, int quantity = 1) {

К имени DropDownList добавляется префикс с именем класса модели ( Product.Quantity вставка Количество ) и мои действия больше не получают правильное значение, есть идеи, как их решить в обоих случаях?

1 Ответ

1 голос
/ 28 февраля 2012

В расширениях DropDownList метод SelectInternal содержит приведенную ниже конструкцию для генерации уникального имени.

string fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);

Я полагаю, что из-за того, что вы используете шаблоны, название модели, содержащее модель, отображается вместе с именем элемента "Количество".Вероятно, чтобы избежать конфликтов имен при использовании нескольких шаблонов.

Если вы действительно хотите "переопределить" это поведение, лучше всего подойдет пользовательская реализация расширения DropDownList.

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