2013-07-09 67 views
5

我認爲Html.HiddenFor可以使用像Html.DisplayForHtml.EditorFor這樣的模板。不幸的是,該方法不像其他人那樣接受TemplateName在ASP.NET MVC中擴展隱藏模板

我知道,解決方法是使用具有HiddenFors的DisplayFor/EditorFor模板。但我想知道如何擴展Html.HiddenFor方法。任何人?

問候

回答

5

好像你被錯誤類比誤導。 HiddenFor完全對應於<input type="hidden"/>標記。就像TextBoxFor,CheckBoxFor等。這些方法不是用來使用模板的。另一邊的DisplayFor/EditorFor專門用於與項目中定義的模板一起使用。因此,你所要求的是不可能的。

但是,您隨時可以使用任何一組參數以及您可能需要的任何邏輯來定義自己的過載HiddenFor

1

有其接受額外的參數的重載 - htmlAttributes。您可以使用它來爲結果標記添加一些屬性。

而且第二個方法是在文件夾中的一個

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

創建剃刀局部視圖名稱HiddenInput.cshtml

1

這裏是你做什麼,你創建作爲一個編輯模板,因爲Andre pointed outHiddenFor相當於輔助方法,如TextBoxForCheckboxFor

您可能也想要一個真正的編輯器,所以請將您的真實編輯器置於~/Shared/EditorTemplates之下。我們將把我們的「隱藏的編輯器」放在您希望使用它的控制器下。

~/Views/ControllerName/EditorTemplates/ModelName.cshtml 

可以說我們有一個Person模型。

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

我們將創建一個局部視圖。

@Model Person 

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

然後我們會假裝我們有一個包含Person作爲屬性的模型。從我們的主要觀點來看,我們稱之爲「隱藏編輯器」。

@Model Foo 

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

易pe檸檬榨汁。有點哈克,但它像一個魅力。

+0

感謝這個如何,但正如我在我的問題中所說的,我已經知道這是一種可能的解決方法:-) – float

+0

這不適合你@float。這是爲了拯救像我這樣的下一個Google用戶,並且發現這個Q/A是一個荒謬的時間。 – RubberDuck