簡體   English   中英

在ASP.NET MVC中擴展HiddenFor模板

[英]Extend HiddenFor Templates in ASP.NET MVC

我認為Html.HiddenFor可以使用Html.DisplayForHtml.EditorFor等模板。 不幸的是,該方法不像其他方法那樣接受TemplateName

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

問候

似乎你被錯誤的類比誤導了。 HiddenFor完全對應於<input type="hidden"/>標記。 就像TextBoxForCheckBoxFor等一樣。這些方法不是為了使用模板而設計的。 EditorForDisplayFor / EditorFor專門用於與項目中定義的模板一起使用。 因此,你所要求的是不可能開箱即用的。

但是,您總是可以使用任何參數集和您可能需要的邏輯為HiddenFor定義自己的重載。

有一個重載接受附加參數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

這是你做的,你創建它作為一個編輯器模板 ,因為正如安德烈所指出的HiddenFor相當於像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)

容易膩的檸檬擠壓。 有點hacky,但它就像一個魅力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM