2010-05-18 198 views
1

我使用asp.net mvc做模型綁定。當我通過模型視圖我能看到一個標籤asp.net mvc模型綁定

<%= Html.Label(Model.title) %> 
<%= Html.Label(Model.description) %> 

內部形式顯示的模型數據,但是我不能夠使用

<%= Html.TextArea(Model.description)%> 

這樣做是否有一個顯示在標籤中的語法與在文本框中顯示的區別?

這是我的看法

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<EditDocumentViewData>" %> 


<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Update 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" 
    <h2>Update</h2> 
     <form id="myForm" action="<%=Url.Action("Update") %>" method="post" > 
    <% Html.EnableClientValidation(); %> 
     <div id="validationSummary"><%= Html.ValidationSummary() %> </div> 
    <%= Html.ClientSideValidation(typeof(Document)) 
     .UseValidationSummary("validationSummary") %> 
<div style="float:left"> 

<input type="button" class="btnpost" id="btnMain" value="Main Thumb"/> 
    <input id="btnDelete" class="btnpost" type="button" value="Delete"/> 
    <br /> <br /> <br /> 

    <br /> <br /> <br /> <br /> 

    <table> 
     <%= Html.HiddenFor(m => m.id)%> 

     <tr> <td> <%=Html.Label("Title")%></td><td> 
    <%=Html.TextBox("title", Model.title)%> 
    </td> </tr> 
     <tr> <td> <%=Html.Label("Description")%></td><td> 
<%= Html.TextArea("description", Model.description)%> 

    </td> 
    <td> 
        <%= Html.ValidationMessage("description")%> 

      </td> 
    </tr><tr><td> <%=Html.Label("Summary")%></td><td> 


    <%= Html.TextAreaFor(m=>m.summary)%> 

    </td> <td> 
        <%= Html.ValidationMessage("summary")%> 

      </td></tr> 


    </form>  


</asp:Content> 

我contollers行動

[AcceptVerbs(HttpVerbs.Get)] 
public ViewResult Update(int Id) 
{ 
    Document doc= _documentRepository.GetById(Id); 
    EditDocumentViewData documentViewData=new EditDocumentViewData(); 
    documentViewData.id = doc.document_id; 
    documentViewData.category = doc.Category1.name; 
    documentViewData.title = doc.title; 
    documentViewData.Thumbs = doc.Thumbs.ToList(); 
    documentViewData.description = doc.description; 

    documentViewData.summary = doc.summary; 

    return View(documentViewData); 
    // TempData["docid"] = doc.document_id; 
    //if (doc != null) 
    // return View(doc); 

    //else 
    // return View("Index"); 

} 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Update(EditDocumentViewData editDoc) 
{ 
    Document doc= _documentRepository.GetById(editDoc.id); 

    doc.title = editDoc.title; 

    doc.description = editDoc.description; 

    doc.summary = editDoc.summary; 
    _unitOfWorkManager.Commit(); 
    return RedirectToAction("Index"); 
} 
+1

不要告訴我你使用'Html.Label()'來顯示任意數據。他們是用於輸入標籤,你知道 – 2010-05-18 21:54:01

回答

2
<%= Html.TextAreaFor(model => model.Description, 4, 10, new { style = "width: 100%", @class = "textarea" })%> 
+0

只是一個示例用法..;) – mare 2010-05-18 21:50:27

3

在您的使用情況,前兩個創建label元素,並使用論據的兩個文本label和標籤的for屬性。第三個將創建textarea,但它使用參數作爲該區域的名稱。如果您希望textarea包含描述的內容,則需要使用其他簽名。

<%= Html.TextArea("Description", Model.Description) %> 

,或者使用強類型的輔助

<%= Html.TextAreaFor(m => m.Description) %> 

上的另一個節點,如果你只是想顯示的模型屬性的內容,你應該使用Encode或較新的<%: %>語法(以ASP.NET 4)。

<span class="description"> 
<%= Html.Encode(Model.Description) %> 
</span> 
+0

謝謝你tvanfosson。它像一個魅力:) – mctayl 2010-05-18 22:45:50

+0

對不起,我只是注意到,在回發,我所有的領域都是空的,你知道爲什麼會發生這種情況嗎?謝謝 – mctayl 2010-05-18 22:53:17

+0

@mctayl - 你的動作簽名是什麼樣的?您是否在後動作簽名或命名參數中使用與模型屬性相匹配的相同模型?您還需要將所有輸入包裝在一個表單中(顯然) - 我只提到它,因爲您沒有包含所有代碼,並且在MVC和Web表單中創建表單是非常不同的。 – tvanfosson 2010-05-18 23:42:14