2011-02-04 20 views
6

Tüm çoğu aynı soruyu olarak onu bu veri varlıklar için CRUD işlemleri oluşturmak için Tring duyuyorum ASP.NET MVC partial views: input name prefixesASP.MVC 3 Jilet Html.PartialView uzantısında Model Ön Eki Ekle

:

public class UserViewModel 
{ 
    protected virtual Id {get; set;} 
    public virtual string Login { get; set; } 
    public virtual string Password { get; set; } 
    public virtual ZipCodeViewModel ZipCode { get; set; } 
} 

Posta Kodu varlık:

:

public class ZipCodeViewModel 
{   
    public virtual string City { get; set; } 

    public virtual string State { get; set; }   

    public virtual string Zip { get; set; } 
} 

Ben de UserViewModel.ZipCode kullanılan kısmi görünümü posta kodu var

@model ZipCodeViewModel  

    @Html.TextBoxFor(x => x.Zip, new { id = "ZipCode", name = "ZipCode.Zip", maxlength = "5" })  

Başka bir Sayfada (örneğin kullanıcı) ZipCodePartialView kullanacağım.

MVC, User ZipCode alanını kaydederken Zip boştur.

Peki, model paterni patriğe nasıl ekleyebilirim?

+0

Nesnenizi nasıl yüklersiniz? İşe mi açılıyor? Tembel yükleme kullanıyor musunuz? – Nekresh

+1

ZipCode'dan elde edilen verilerin asla işlenmemiş sayfaya dönüştürmediğini mi söylüyorsunuz? Yoksa veriyi geri gönderdiğinde, verilerin asla modele girmediğini mi söylüyorsun? –

+0

Verileri geri yükle, her zaman boş. –

cevap

11

bu uzantısını deneyin. Kısmen için ikinci kez.

+0

Tam olarak ihtiyacım olan şey –

10

Html.RenderPartial() kullanmak yerine kısmi görünümünüzü Shared/EditorTemplates dizinine koyun ve ona türün adını yazın (bu durumda ZipCodeViewModel). Ardından, özelliğin ifadesinde geçen Html.EditorFor() kodunu kullanabilirsiniz. EditorFor() alanları doğru bir şekilde önler, böylece MVC'deki model ciltleyici verilerinizi doğru bir şekilde yerleştirebilir.

yüzden bazı bağlantılar ve kaynakları bulmaya çalışacağım ama senin için orada cevap almak istedim edeceğiz bu

@model UserViewModel 
..... 
@Html.EditorFor(m => m.ZipCode); 

gibi bir şey.

DÜZENLEME: Neyse Quick Tips About ASP.NET MVC: Editor Tempaltes

o Html.TextBoxFor() veya Html.DropDownFor() uzantıları kullandığınızda, ne yaptıklarını tam adı olsun: Bu blog yayını uzantısı ve EditorTempaltes EditorFor() temelleri üzerine gitmek gibi görünüyor Özelliği, girdiğiniz ifadeden ve HTML giriş öğesinin ad ve kimlik özelliklerini buna göre ayarlar. Örnek olabilir:

@Html.TextBoxFor(m => m.Person.FirstName) 

<input id="Person_FirstName" name="Person.FirstName" type="text" value="<what ever was in FirstName>" /> 

olanlar, giriş adları hale getirecektir ve değerler sonrası verileri anahtar/değer çiftleri vardır. Varsayılan ASP.NET MVC model bağlayıcısı, bu tuşların, denetleyici eylemlerinin gerçekleştirdiği modellere kadar eşleşmesini sağlar. Bir eşleşme bulabilirse, değeri ayarlar.

Yukarıdaki sorunun nedeni, muhtemelen, kısmi görünümünüzdeki giriş adlarının ZipCodeViewModel'dan kaynaklanmış olması, ancak işleminizin UserViewModel içeriyor olmasıdır. EditorFor(), sizin için isimleri önler, böylece temelde sizin için bağlanmış olan verileri geri gönderecek kısmi bir görünüm oluşturabilir. Her ne kadar isim niteliklerini kendiniz için giriş elemanlarına koyabilseniz de (ya da yorumlarda önerdiğiniz gibi her şeyi düzleştirdiğinizde) bu yardımcıları sizin için yapması gerekiyor.

Umarız neler olduğunu ve sizin için olası bir çözümü açıklamaya yardımcı olur.

public static void RenderPartialWithPrefix(this HtmlHelper helper, string partialViewName, object model, string prefix) 
     { 
      helper.RenderPartial(partialViewName, 
           model, 
           new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = prefix } }); 
     } 
+0

adresinden daha iyi bir yanıt buldu Benim ZipCode modelimden Kullanıcı modeline ve tüm çalışmalara alan ekleyebilirim. Ama sonra View'de ZipCode görünümünü oluşturmalıyım. MVC'nin iyi bir uygulaması değildir. Programın çeşitli yerlerinde kullanabileceğim UserControl gibi bir şey elde edeceğim. –

+0

Gerekirse/istemiyorsanız ve EditorFor() yardımcı ile EditorTemplates'ın yeniden kullanılabilir bir kısmi görünüm oluşturmasını sağlamanız durumunda Kullanıcı modelinizi karıştırmamanızı öneririm. Bunun peşinde olduğun gibi olduğuna inanıyorum. –

+0

Haklısınız. Anwser. –

-1

Aşağıdaki kod edebilirsiniz:

ActionResult MyAction(UserViewModel model) 
{ 
    TryUpdateModel(model.ZipCode); 
} 

Çok iyi iki kez güncellenecektir Model

İlgili konular