2013-07-09 19 views
5

Html.HiddenFor, Html.DisplayFor veya Html.EditorFor gibi Şablonları kullanabileceğini düşündüm. Ne yazık ki yöntem diğerleri gibi bir TemplateName kabul etmez.ASP.NET MVC'de HiddenFor Şablonlarını Genişletin

Buradaki çözüm, HiddenFors içeren bir DisplayFor/EditorFor Şablonu kullanmak olacaktır. Ancak, Html.HiddenFor yönteminin nasıl genişletileceğini öğrenmek istiyorum. Kimse?

Selamlar

cevap

5

görünüyor adıyla klasörlerden birine

~/Areas/AreaName/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Areas/AreaName/Views/Shared/DisplayTemplates/TemplateName.cshtml 
~/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Views/Shared/DisplayTemplates/TemplateName.cshtml 

yılında jilet kısmi görünümü oluşturmaktır. HiddenFor, <input type="hidden"/> etiketine tam olarak karşılık gelir. Tıpkı TextBoxFor, CheckBoxFor vb. Gibi. Bu yöntemler şablonları kullanmak için tasarlanmamıştır. Diğer tarafta bulunan DisplayFor/EditorFor, projede tanımlanmış şablonlarla kullanılmak üzere özel olarak yaratılmıştır. Böylece, sorduğunuz şey kutudan çıkamaz. Bununla birlikte, HiddenFor için kendi aşırı yükünüzü istediğiniz parametrelerle ve istediğiniz mantıkla her zaman tanımlayabilirsiniz.

1

ek bir parametre kabul aşırı yük var - htmlAttributes. Ve sonuç etiketine bazı özellikler eklemek için kullanabilirsiniz.

Ayrıca ikinci yolu yanlış benzetme göre saptırmak gibi HiddenInput.cshtml

1

Burada ne, sen çünkü olarak Andre pointed out, HiddenForTextBoxFor ve CheckboxFor gibi yardımcı yöntemler eşdeğerdir, bir editör şablonuna olarak oluşturmak var.

O an gerçek editörü isteyeceksiniz olabilir, bu yüzden ~/Shared/EditorTemplates altında gerçek editörü yerleştirin. Kullanmak istediğin kontrolörün altına "gizli editörümüzü" yerleştireceğiz.

~/Views/ControllerName/EditorTemplates/ModelName.cshtml 

biz Person modeli var düşünelim.

public class Person 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
} 

Biz kısmi bir görünüm oluşturacağız.

@Model Person 

@Html.HiddenFor(p => p.First); 
@Html.HiddenFor(p => p.Last); 

Sonra taklit edeceğiz biz bir özellik olarak bir Person içeren bir model var. Ana görünümümüzden, "gizli editörümüzü" böyle diyoruz.

@Model Foo 

@Html.EditorFor(f => f.Person) 

Kolay peasy limon squeezy. Biraz hacky, ama bir çekicilik gibi çalışır.

+0

Bunun için sağladığınız için teşekkürler, ama sorumu söylediğim gibi, bunun olası bir geçici çözüm olduğunu zaten biliyorum :-) – float

+0

Bu sizin için @float değildi. Bu, benim gibi olan ve bu Q/A'nın saçma bir miktarını bulan bir sonraki adamı kurtarmaktı. – RubberDuck

İlgili konular