2010-05-18 4 views
1

Я использую asp.net mvc, чтобы сделать привязку модели. Когда я прохожу модель с точки зрения я могу видеть данные модели, отображаемые в виде внутри этикеткиasp.net mvc model binding

<%= 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()' для отображения произвольных данных. Они предназначены для ввода меток, вы знаете –

ответ

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

только один пример использования ..;) – mare

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

+0

Извините, я просто заметил, что при обратной передаче все мои поля были пустыми, вы знаете, почему это происходит? Спасибо – mctayl

+0

@mctayl - как выглядит ваша подпись действия? У вас есть одна и та же модель в сигнатуре post action или именованных параметрах, которые соответствуют свойствам моделей? Вам также необходимо обернуть все входы в форме (очевидно). Я упоминаю только об этом, потому что вы не включили весь свой код, и создание формы очень отличается в MVC и веб-формах. – tvanfosson