1

我刚开始使用 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 或类似的东西。

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

我是否忽略了一些非常明显的事情?

4

1 回答 1

1

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

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

但是,假设有必要,我可以想到两种方法来做到这一点:

  1. 让调用者传入名称或名称前缀(如您所建议的那样)。
  2. 创建您自己的计数器,并在每次调用助手时递增它。最大的问题是在哪里保存计数器的信息。保存它的一个合乎逻辑的地方是 HttpContext.Items 集合,它是每个请求的“数据包”。每次调用助手时,它都会检查 Items 包以查看当前计数,将其增加 1,使用该数字并更新包。
于 2013-02-28T17:18:19.657 回答