SORU
28 EYLÜL 2009, PAZARTESİ


ASP.NET MVC kısmi görünümleri: giriş adı önekleri

Gibi ViewModel var sanırım

public class AnotherViewModel
{
   public string Name { get; set; }
}
public class MyViewModel
{
   public string Name { get; set; }
   public AnotherViewModel Child { get; set; }
   public AnotherViewModel Child2 { get; set; }
}

Görünümünde kısmi bir model oluşturabilirim

<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>

Kısmi olarak yapacağım

<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>

Ancak, sorun her iki işlerler name="ihtiyacım var"="Çocuk.adı bu.Adı" model binder düzgün çalışması için. Ya da, name="Alt2.Adı" ben ikinci özellik aynı kısmi görünümü kullanarak işlemek.

Nasıl benim kısmi görünümü otomatik olarak gerekli öneki tanımak yapabilirim? Parametre olarak geçirmek. ama bu çok zahmetli bir iştir. Bu örnek için yinelemeli olarak işlemek isterken daha da kötü. Bir şekilde bir önek ya da, daha iyisi, arama lambda expression otomatik reconition bu kısmi görünümleri işlemek için vardır

<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>

otomatik olarak doğru "Çocuk." oluşturulan öneki/ıd dizeleri? ekler

Ben kabul herhangi bir çözüm de dahil olmak üzere 3-rd parti görünümü motorları ve kütüphaneler - ben aslında Spark View Engine ("çözmek" sorunu kullanarak makroları) ve MvcContrib, ama değil bulmak bir çözüm var. XForms, İnputBuilder, v2 bu işlevsellik sağlayan herhangi bir araç/ınsight harika olacak MVC.

Şu anda bu kendi kendime ama zaman kaybı gibi görünüyor kodlama düşünüyorum, bu önemsiz şeyler zaten uygulanmadı inanamıyorum.

Manuel çözüm bulan bir çok şey olabilir var, ve hepsi de bekliyoruz. Örneğin, benim şiddetli İPartialViewModel<T> { public string Önek; T Modeli;} göre kapalı olması için zorlarım. Ancak bazı mevcut/onaylanmış çözümü tercih ederim.

GÜNCELLEME: cevap benzer bir soru var hayır here.

CEVAP
9 HAZİRAN 2011, PERŞEMBE


Html yardımcı sınıfı tarafından bu uzatabilirsiniz :

using System.Web.Mvc.Html


 public static MvcHtmlString PartialFor<TModel, TProperty>(this HtmlHelper<TModel> helper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, string partialViewName)
    {
        string name = ExpressionHelper.GetExpressionText(expression);
        object model = ModelMetadata.FromLambdaExpression(expression, helper.ViewData).Model;
        var viewData = new ViewDataDictionary(helper.ViewData)
        {
            TemplateInfo = new System.Web.Mvc.TemplateInfo
            {
                HtmlFieldPrefix = name
            }
        };

        return helper.Partial(partialViewName, model, viewData);

    }

ve sadece bu gibi görüşlerinizi kullanabilirsiniz :

<%= Html.PartialFor(model => model.Child, "_AnotherViewModelControl") %>

ve her şeyin yolunda olduğunu göreceksiniz!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • LiteralMSPaint

    LiteralMSPai

    27 EKİM 2010
  • The Verge

    The Verge

    8 AĞUSTOS 2006