asp.net mvc модель привязки - PullRequest
1 голос
/ 19 мая 2010

Я использую 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>

мои действия контроллеров

[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");
}

Ответы [ 2 ]

3 голосов
/ 19 мая 2010

При использовании первые два создают элементы 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>
2 голосов
/ 19 мая 2010
    <%= Html.TextAreaFor(model => model.Description, 4, 10, new { style = "width: 100%", @class = "textarea" })%>
...