2011-11-16 77 views
1

我收到以下錯誤:Html.Raw給錯誤

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

當我嘗試使用:

@Html.DisplayFor(modelItem => Html.Raw(item.ChangesMade)) 
在我的asp.net MVC 3視圖

你可以請建議正確的語法?

+2

你根本不需要Html.Raw – Joe

回答

3

修訂 你不能像這是從Html.Raw返回HtmlString使用HTML.DisplayFor幫手模板。

相反,假設你item.ChangesMade包含原始的HTML是有益的嘗試只是

@Html.Raw(modelItem => modelItem.ChangesMade) 

或者(更可能),如果ChangesMade僅僅是一個值,然後使用HTML輔助:

@Html.TextBox("NameOfTextbox", modelItem.ChangesMade) 

簡單屬性的最簡單方法是使用模板幫助器(EditorFor,TextboxFor等),因爲它們將利用您在模型類中使用的任何DataAnnotation屬性 - 對於內置驗證尤其重要!

例如:

public class MyModelClass 
{ 
    [Required("The name field is required")] 
    public virtual string Name { get; set; } 
} 

所以,你可以使用模板化的助手,如果item.ChangesMade是一個簡單的類型,可以通過表達(文本框,複選框,文本區域等)。

@Html.EditorFor(modelItem => modelItem.ChangesMade); 

您也可以結合使用內置的驗證:

@Html.EditorFor(modelItem => modelItem.ChangesMade) 
@Html.ValidationMessageFor(modelItem => modelItem.ChangesMade) 

希望幫助!

0

我建議你創建一個顯示模板採取簡單的字符串作爲模型

喜歡的東西:

@model string 
@{ 
<span>@Html.Raw(Model)</span> 
} 

稱它爲DisplayMyHtmlString並把它下查看/共享/ DisplayTemplates

在您的看法只是使用EditorFor幫手:

@Html.DisplayFor(m => m.ChangesMade, "DisplayMyHtmlString", "Name") 

它應該工作,我使用EditFor類似的模板。

1

爲什麼你在那裏使用Html.Raw?只是這樣寫

@Html.DisplayFor(modelItem => item.ChangesMade) 
+0

@ Html.Raw(Model.ChangesMade)大寫「M」也許??? – 2011-12-03 10:19:05

0

我想知道同樣的事情。我假設你使用的Visual Studio中的視圖生成器來創建你的看法,並結束了與類似:

. 
. 
@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.field1) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.field2) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.field3) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) | 
      @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) | 
      @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ }) 
     </td> 
    </tr> 
} 
. 
. 

玩了一個位後,我剛剛結束了更換:

@Html.DisplayFor(modelItem => item.field1) 

有:

@Html.Raw(item.field1) 

它輸出爲我所希望的結果 - 一個HTML編碼場

授予您還希望對付投擲腳本標籤等的安全措施。