在editortemplate中检索模型值的正确方法

时间:2013-05-30 12:39:48

标签: asp.net mvc-editor-templates

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

@Html.TextBox("", null)

此编辑器模板应检索调用它的元素的名称和值。名称确实设置正确。但是,价值却没有。

数据类型不同 - 有时它是双精度数,有时它是一个字符串。所以我不能将特定的数据类型声明为模型。

我能使其正常运行的唯一方法是将类型指定为动态:

@model dynamic

@Html.TextBox("", (string)Convert.ToString(Model))

这似乎是一种非常笨拙的语法,虽然它有效。我做对了吗?

修改

我的editortemplate的完整代码是一个文本字段,可以通过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>

0 个答案:

没有答案