2013-02-28 63 views
1

我刚刚开始在剃刀,我的第一个倾向是对待像.ACSX的助手。我如何(轻松地)在Razor中动态命名助手元素?

比方说,我做一个很简单的帮手:

@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或类似的东西。

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

我可以看到痛苦明显的东西吗?

回答

1

剃刀只发出页面中的标记。它在增加标记方面很少。 Razor v2增加了条件属性,但是这对代表开发者来说仍然有些明确。

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

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

  1. 让主叫方传递一个名称或名称前缀(如你所说)。
  2. 创建自己的计数器,并在每次调用帮助器时递增计数器。最大的问题是保存柜台信息的地方。保存它的一个合理的地方是HttpContext.Items集合,它是一个请求的“数据包”。每次调用帮助程序时,都会检查Items包以查看当前的计数,并将其增加1,使用该数字并更新包。
+0

我明白了。我来自非MVC ASP.NET背景,不需要唯一名称的范例对我来说并不合适。我想,因为我从我的高级开发人员w/r/t那里得到了基本相同的答案,为什么需要独特的名称,这是我自己的开发风格的障碍,我必须要克服。 – friggle 2013-02-28 17:53:31

+0

@friggle是的,请不要认为它是错误的*有一个ID - 它根本没有错。这更多的是关于需求和常见做法。最后,您可以根据需要构建应用程序,并且如果应用程序具有指定元素最简单或最好,那么就使用它。 – Eilon 2013-02-28 18:15:52

相关问题