2010-05-18 126 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