考虑这个编辑器模板(即使它没有意义 - 为了清楚起见我已经简化了它):
@Html.TextBox("", null)
此编辑器模板应检索调用它的元素的名称和值。名称确实设置正确。然而,价值没有。
数据类型不同 - 有时是双精度,有时是字符串。所以我不能将特定的数据类型声明为模型。
我可以使它正常运行的唯一方法是如果我将类型指定为动态:
@model dynamic
@Html.TextBox("", (string)Convert.ToString(Model))
这似乎是一个非常笨拙的语法,尽管它有效。我做对了吗?
编辑:
我的编辑器模板的完整代码是一个文本字段,可以通过 js ajax 调用动态计算。它完美地工作,并且可以作为任何可以从其他字段的值计算出来的值的通用模板。它不一定是字符串类型。但是,我需要为 Html.TextBox 值的参数提供一个对象。
@model dynamic
@{
var CalcClasses = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcClasses")) ? " " + @ViewData.ModelMetadata.AdditionalValues["CalcClasses"] : "";
var CalcUrl = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcUrl")) ? @ViewData.ModelMetadata.AdditionalValues["CalcUrl"] : "";
var CalcDependsOn = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcDependsOn")) ? @ViewData.ModelMetadata.AdditionalValues["CalcDependsOn"] : "";
var CalcTooltip = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcTooltip")) ? @ViewData.ModelMetadata.AdditionalValues["CalcTooltip"] : "";
}
<div class="calculated-field-container input-append">
@Html.TextBox("", (string)Convert.ToString(Model), new
{ @class="calculated-field" + CalcClasses,
data_calc_url = CalcUrl,
data_calc_dependencies = CalcDependsOn
})
<button class="btn button-calculate" data-toggle="tooltip" title="@CalcTooltip">=</button>
</div>
编辑 2:
似乎这也有效:
@{
var CalcClasses = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcClasses")) ? " " + @ViewData.ModelMetadata.AdditionalValues["CalcClasses"] : "";
var CalcUrl = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcUrl")) ? @ViewData.ModelMetadata.AdditionalValues["CalcUrl"] : "";
var CalcDependsOn = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcDependsOn")) ? @ViewData.ModelMetadata.AdditionalValues["CalcDependsOn"] : "";
var CalcTooltip = (@ViewData.ModelMetadata.AdditionalValues.ContainsKey("CalcTooltip")) ? @ViewData.ModelMetadata.AdditionalValues["CalcTooltip"] : "";
}
<div class="calculated-field-container input-append">
@Html.TextBox("", Model, new
{ @class="calculated-field" + CalcClasses,
data_calc_url = CalcUrl,
data_calc_dependencies = CalcDependsOn
})
<button class="btn button-calculate" data-toggle="tooltip" title="@CalcTooltip">=</button>
</div>