Razor:從aspx到cshtml常見(jiàn)錯(cuò)誤及正確書寫方法
從aspx轉(zhuǎn)到chshtml還是有很多要適應(yīng)的地方的,本帖是個(gè)人學(xué)習(xí)筆記帖不斷更新。每天開(kāi)著本帖編程。
按第一個(gè)有意義的編譯錯(cuò)誤的首字母排序,便于查找:
Cannot implicitly convert type 'void' to 'object'
錯(cuò)誤:@Html.RenderPartial("_XXXX", Model);
正確:@{Html.RenderPartial("_XXXX", Model);}
其他:這個(gè)寫法深刻表明了“<% xxx;%>”這樣的代碼變成了@{xxx;}。
不過(guò)感覺(jué)這個(gè)寫法很丑,是否有更好的?
'object': type used in a using statement must be implicitly convertible to 'System.IDisposable'
錯(cuò)誤:@using "...";
正確:@using ... ;(把引號(hào)去掉)
說(shuō)明:可以這樣理解,這里的東西除了多了個(gè)@之外,都和cs文件中的語(yǔ)法一樣了。
The name 'i' does not exist in the current context
錯(cuò)誤:
@{
<table>
for (int i = 0; i <= 15; i++)
{
<tr>
//這里用到了i
</tr>
}
</table>
}
正確:
<table>
@for (int i = 0; i <= 15; i++)
{
<tr>
//這里用到了i
</tr>
}
</table>
任何<>都將從C#語(yǔ)法變到html語(yǔ)法,而@{}則相反。
-----------------------------------------------------------------------------------------------
不好:(也能運(yùn)行)
<td>
@foreach (var user in Roles.GetUsersInRole((string)ViewBag.OldRole))
{
<text>@user<br /></text>
}
</td>
好:
<td>
@foreach (var user in Roles.GetUsersInRole((string)ViewBag.OldRole))
{
@user<br />
}
</td>
說(shuō)明:@除了能把語(yǔ)境從html變成cs,也能做相反的變化。這樣代碼的簡(jiǎn)潔性就好多了。
說(shuō)明:本以為Razor想把“Html中鑲嵌C#”變成"C#中鑲嵌Html"(類似Helper),看來(lái)也不盡然。后者的好處是可以被測(cè)試,而前者不行。在推出Razor的時(shí)候官網(wǎng)曾經(jīng)提到要讓Razor可測(cè)試,不知道如何實(shí)現(xiàn),拭目以待。

浙公網(wǎng)安備 33010602011771號(hào)