代码之家  ›  专栏  ›  技术社区  ›  George Tsiokos

如何重写HTML助手方法用于模型属性的字符串表示形式?

  •  2
  • George Tsiokos  · 技术社区  · 16 年前

    HTML助手方法检查viewDataDictionary中的值。值可以在字典中,也可以在模型中,作为属性。要提取该值,名为ViewDataEvaluator的内部密封类使用PropertyDescriptor获取该值。然后,调用convert.toString()将返回的对象转换为字符串。

    控制器动作所需代码

    控制器操作应该只填充模型,而不是格式化它(格式化模型是全局的)。

    视图中的所需代码

    视图可以呈现HTML文本框,并使用以下代码行提取属性的字符串表示形式:

    <%=Html.TextBox(“Date”) %>
    <%=Html.TextBox(“Time”) %>
    <%=Html.TextBox(“UnitPrice”) %>
    

    将模型的属性绑定到htmlhelper.textbox()。

    对于textbox_s值,来自模型实例的UnitPrice属性_s值将转换为字符串。我需要用自己的字符串转换来覆盖这个行为,字符串是按属性“而不是按类型”。例如,我需要一个不同的字符串表示 十进制的 对于UnitPrice和另一个字符串表示 十进制的 对于UnitQuantity。

    例如,我需要根据市场来格式化单价的小数精度。

    string decimalPlaces = ViewData.Model.Precision.ToString ();
    <%=Html.TextBox(“UnitPrice”, ViewData.Model.TypeName.UnitPrice.ToString("N" + decimalPlaces)) %>
    

    双向数据绑定

    就像iModelBinder一样 解析 对于模型的每个属性,我需要 格式 对于每个属性,有点像Windows窗体 binding ,但基于模型而不是控件。这将使模型能够往返并具有适当的格式。我更喜欢可以覆盖默认格式的设计。此外,我的模型位于单独的程序集中,因此指定格式化程序的属性化属性不是一个选项。

    请注意我需要 特定属性 模型的格式,而不是 特定类型 格式化。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Tim M.    12 年前

    ModelState

    <input type="text" name="UnitPrice" value="$1.23" />
    

    $<%= Html.TextBox("UnitPrice") %>