0

考虑这个编辑器模板(即使它没有意义 - 为了清楚起见我已经简化了它):

@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>
4

0 回答 0