如何递增从接受字符串的参数传递的整数

时间:2014-03-09 00:53:42

标签: c# html asp.net razor

我创建了一个创建Html元素4次和

的方法
public IHtmlString customHtml(string htmlCode){
    for(int i = 0; i<4 i++){
        htmlCode += htmlCode;
    }
    return new HtmlString(htmlCode);
 }

当调用此方法4次时,int someNumber与字符串连接,我希望它增加1-4

int someNumber = 1;

@customHtml("<div>"+(someNumber++)+"<div>")

结果Html为:

<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>

相反,我得到了这个:

<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>

元素不会总是<div>,并且数字并不总是通过字符串传递,而int可以从任何数字开始而不仅仅是1

4 个答案:

答案 0 :(得分:3)

您需要将htmlCode作为模板传递,稍后将进行格式化:

您的剃刀语法变为:

@customHtml("<div>{0}<div>")

你的方法看起来像这样:

public IHtmlString customHtml(string htmlCode){
    var sb = new StringBuilder();

    for(int i = 1; i<=4; i++){
        sb.AppendFormat(htmlCode, i);
    }
    return new HtmlString(sb.ToString());
 }

原始尝试不起作用的原因是您将字符串传递给方法。你没有传递表达方式。这意味着您将精确的字符串"<div>1</div>"传递给您的方法,然后您的方法只将该字符串写出四次。

<强>附录:

现在,如果你真的想像你的例子一样构建它,你可以这样做:

public IHtmlString customHtml(Func<string> s)  {
  var sb = new StringBuilder();

    for(int i = 1; i<=4; i++){
        sb.Append(s());
    }
    return new HtmlString(sb.ToString());
}

然后,您的Razor语法如下所示:

int someNumber = 1;
@customHtml(() => "<div>" + someNumber++ + "</div>").Dump();

这些解决方案中的任何一个都能为您提供相同的结果:<div>1</div><div>2</div><div>3</div><div>4</div>

答案 1 :(得分:1)

只需从方法中删除参数,并在生成html标记时使用您正在迭代的变量。

var htmlCode = new StringBuilder();

for (int i = 0; i < 4; i++)
{
    htmlCode.AppendFormat("<div>{0}</div>", i);
}
return new HtmlString(htmlCode.ToString());

如果确实需要将html传递给此方法,可能是因为您“重复”的标记发生了变化,那么我们需要对其进行修改。

答案 2 :(得分:0)

尝试替换......

int someNumber = 1;
@customHtml("<div>"+(someNumber++)+"<div>")

int someNumber = 0;
@customHtml("<div>"+(++someNumber)+"<div>");

奇怪的是,当出现增量/减量问题时,这对我来说无数次。

答案 3 :(得分:0)

为什么不直接发送两个参数?

public IHtmlString customHtml(string htmlCode, int someNumber){
    var sb = new StringBuilder();

    for(int i = someNumber; I < someNumber + 4; i++){
        sb.AppendFormat(htmlCode, i);
    }
    return new HtmlString(sb.ToString());
}

你这样称呼它:

@customHtml("<div>{0}<div>", someNumber)