【问题标题】:How do I (easily) dynamically name helper elements in Razor?我如何(轻松)在 Razor 中动态命名辅助元素?
【发布时间】:2013-02-28 16:24:33
【问题描述】:

我刚开始使用 Razor,我的第一个想法是像对待 .ACSX 一样对待 Helpers。

假设我做了一个非常简单的助手:

@helper HowManySpans() {
<div>
<input type="text" name="txtLoops" /><input type="submit" value="how many?" />
@{ if (IsPost) {
    var count = Request["txtLoops"];
    var i = 1;
    while (i < count) {
       <span>Span #@i</span>
       i++;
       }
   }
</div> 
}

在我将两个放在同一页面上之前,它工作正常。我期待编译器发出像 ASPX 页面通常那样做前缀的元素名称,yknow,ctl00_Header_txtLoops 或类似的东西。

我想在一个更受参数驱动的助手中,我可以使用我的参数给自己的名字加上前缀,但我觉得这仍然会推迟这个问题。如果我有一些动态帮助器在名称前加上某个参数,我仍然可以在页面上只有一个带有该参数的页面。

我是否忽略了一些令人痛苦的显而易见的事情?

【问题讨论】:

    标签: razor html-helper razor-2


    【解决方案1】:

    Razor 仅发出页面中的标记。它几乎没有增加标记的方式。 Razor v2 添加了条件属性,但这仍然代表开发人员明确表示。

    我有一个问题是为什么元素甚至需要唯一的名称。在许多现代 HTML5 应用程序中,几乎不需要元素具有唯一名称。

    但是,假设有需要,我可以想到两种方法:

    1. 让来电者传入姓名或姓名前缀(按照您的建议)。
    2. 创建您自己的计数器,并在每次调用助手时递增。最大的问题是在哪里保存计数器的信息。保存它的一个合乎逻辑的地方是 HttpContext.Items 集合,它是每个请求的“数据包”。每次调用 helper 时,它都会检查 Items 包以查看当前计数,将其增加 1,使用该数字并更新包。

    【讨论】:

    • 我明白了。我来自非 MVC ASP.NET 背景,不需要唯一名称的范例对我来说真的没有意义。我想既然我从我的高级开发人员那里得到了基本相同的答案,w/r/t 为什么需要唯一的名称,这是我自己的开发风格的一个障碍,我必须克服。
    • @friggle 是的,请不要认为拥有 ID 是错误 - 这一点都没有错。它更多地是关于需求和常见做法。最后,您可以随心所欲地构建应用程序,如果应用程序具有命名元素是最简单或最好的,那么就使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多