【问题标题】:Retrieve Data from MVC 3 Razor Html Helper从 MVC 3 Razor Html Helper 中检索数据
【发布时间】:2011-10-18 16:10:20
【问题描述】:

我正在尝试实现的 Razor Html Helper 有一个特别有趣的问题。这个助手的目标是接受一个 System.Type,从该类型的属性和相关属性生成一个 JQuery-validate-able 表单,以及返回一个 JavaScript 字符串,该字符串将在运行时用作所述生成表单的验证规则。我通过重复调用@Html.Raw() 来生成表单,并在我遍历属性和属性时构建它。最初,html 帮助程序是写在唯一将要使用它的文件中,但因为这是一个通用且经常使用的帮助程序,我已将它移到我项目中的 App_Code 文件夹中。

这就是问题所在:我发现当这个助手在 App_Code 中时,我无法使用 ViewData 从助手返回任何数据。最初,我有两个帮手;一个是生成表单并将 ViewData 中的 JavaScript 字符串隐藏起来,另一个是获取相同的 JavaScript 字符串并将其打印到我的客户端脚本块中的文档中。我希望这个助手不仅能生成表单,还能一次性给我这个 JavaScript 字符串,这样就不必做重复的 O(n) 工作。

原始伪代码:

@helper MakeFormAndValidationRule(Type)
{
    //generate form
    //write form using @Html.Raw()
    //generate validation rules simultaneously
    //store validation rules in ViewData
}

@helper WriteValidationRules()
{
    @Html.Raw(ViewData["rules"]);
}

<form>
    MakeFormAndValidationRule(Type)
</form>
<script>
    form.validate(@WriteValidationRules())
</script>

问题:对于这类情况,什么是“最佳实践”?我可以将验证规则写入 DOM 以供以后检索,并在运行时使用 JQuery 魔术将其提取出来,但如果有更好、更清洁的方法,我想知道。

【问题讨论】:

    标签: html asp.net-mvc razor helper


    【解决方案1】:

    我想你想创建一个extension method for the HtmlHelper 类。我相信这应该可以解决您的 ViewData 问题。

    【讨论】:

      【解决方案2】:

      ViewData 是 model 的一部分,您应该使用自定义 HTML 助手,而不是 Razor 助手。

      类似这样的:

      public static MvcHtmlString MakeFormAndValidationRule<TModel>(this HtmlHelper<TModel> helper, Type type)
      {
         var viewData = helper.ViewData;
      
         // Your code...
      }
      

      More info on custom HTML helpers.

      另外,我认为您不应该生成完整的表单并使用助手进行验证。责任太大了。

      而是考虑将责任分离给custom editor template

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 1970-01-01
        • 2011-07-09
        • 2011-07-29
        相关资源
        最近更新 更多