2011-01-13 8 views
0

Ich baue ein Blog mit ASP.NET MVC 2 zum Spaß, um zu lernen und vielleicht später in der Zukunft zu verwenden. Im Moment ist mein Problem das Hinzufügen eines Kommentars zu einem Post. Ich habe den Beitrag Details stark typisierte Ansicht, die den Beitrag anzeigt, und ich rendere eine stark typisierte Teilansicht, die über das Formular verfügt, um einen neuen Kommentar hinzuzufügen. Was ich versuche, dies zu tun ist:Pass-Modell mit festgelegten Werten zu PartialView

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<Blog.Models.Post>" %> 

<h2>Details</h2> 

<fieldset> 
    <legend>Fields</legend> 

    <div class="display-field"><h2><%: Model.Title %></h2></div> 

    <div class="display-field"> 
     <p><%: Model.Summary %></p> 
    </div> 

    <div class="display-field"> 
     <p><%: Model.Content %></p> 
    </div> 

</fieldset> 

<div id="comment-section"> 
    <% foreach (var comment in Model.Comments) 
     { %> 
      <div> 
       <h3><%: comment.Title %></h3> 
       <p><%: comment.DateAdded %></p> 
       <p><%: comment.Content %></p> 
      </div> 
    <% } %> 
</div> 

<div> 
</div> 

<% Html.RenderPartial("Comment/Add", new Blog.Models.Comment { PostID= Model.ID }); %> 

<p> 
    <%: Html.ActionLink("Edit", "Edit", new { id = Model.ID }) %> | 
    <%: Html.ActionLink("Back to List", "Index") %> 
</p> 

Und die PartialView hinzufügen ist dieses:

<% using (Html.BeginForm("Add", "Comment")) {%> 
    <%: Html.ValidationSummary(true)%> 

    <fieldset> 
     <legend>Add a comment</legend> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.Title)%> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(model => model.Title)%> 
      <%: Html.ValidationMessageFor(model => model.Title)%> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.Content)%> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextAreaFor(model => model.Content, new { Style = "width:500px; height:150px;" })%> 
      <%: Html.ValidationMessageFor(model => model.Content)%> 
     </div> 

     <p> 
      <input type="submit" value="Add" /> 
     </p> 
    </fieldset> 

<% } %> 

Aber in meinem Comment wenn ich das gepostete Kommentar-Objekt, es kommt mit cero (0) als Post-ID, also kann ich es nicht mit dem entsprechenden Post binden. Irgendwelche Gedanken?

Antwort

0

die Post-ID als verstecktes Feld hinzufügen ...

<input type="hidden" name="PostID" value="<%: Model.ID %>" /> 
+0

Das funktionierte. Ich verwendete ASP.NET MVC Html Helfer für das: <%: Html.HiddenFor (Modell => model.PostID)%> – FelixMM

0

Wie sieht die Formularaktions-URL aus? Sie müssen wahrscheinlich die ID routeValue ...

<% using (Html.BeginForm("Add", "Comment", new { id = Model.id })) {%> 
1

hinzufügen Sie haben nicht die PostID auf dem Formular zum Hinzufügen eines neuen Kommentars. Die einzigen Daten, die MVC zur Verfügung hat, sind die Daten, die vom Client gesendet werden (Formulardaten/URL-Daten usw.). Sie können entweder ein verstecktes Feld verwenden oder den Referrer der aktuellen Anfrage ansehen und die PostID analysieren, vorausgesetzt, sie befindet sich in der URL. Ich würde mich für das versteckte Feld entscheiden.

Verwandte Themen