Das Viewdata Element, das den Schlüssel ‚SelectedRating‘ hat, ist vom Typ ‚System.Int32‘, sondern muss vom Typ "IEnumerable" sein.MVC - Dropdownlist/PartialView Ausgabe - „Viewdata hat den Schlüssel int .. ..must IUnumerable sein ...“
Dies ist der Fehler, den ich erhalte, wenn ich versuche, eine DropDownList über eine Teilansicht hinzuzufügen. Ich habe versucht, zu folgen this solution, aber ich habe es irgendwie aufgrund meiner geringen Erfahrung in der Codierung versäumt, dies zu tun. Diese
ist, wie mein Code Look für den Moment:
[HttpGet]
public ActionResult Rating()
{
RateReviewVM model = new RateReviewVM()
{
ReviewId = id,
RatingList = new SelectList(Enumerable.Range(1, 10))
};
return View(model);
}
[HttpPost]
public ActionResult Rating(RateReviewVM model) {
if (!ModelState.IsValid)
{
model.RatingList = new SelectList(Enumerable.Range(1, 10));
return View(model);
}
//...
Ansicht für _RatingPartial
@model xxxx.ViewModel.RateReviewVM
<h6>Rate the review</h6>
using (Html.BeginForm()) {
<div class="form-group">
@Html.LabelFor(m => m.SelectedRating)
@Html.DropDownListFor(m => m.SelectedRating, Model.RatingList, "-Please select-", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.SelectedRating)
</div>
<button type="submit" class="btn btn-default submit">Rate</button>
}
}
Dies ist, wie ich versuche,
@{
var newRating = new xxxx.ViewModel.RateReviewVM { ReviewId = Model.Id };
Html.RenderPartial("_RatingPartial", newRating);
}
_RatingPartial Ansicht anzuzeigen
Modell
public class RateReviewVM {
public System.Guid Id { get; set; }
public System.Guid UserId { get; set; }
public System.Guid ReviewId { get; set; }
public bool HasLiked { get; set; }
public Nullable<int> Rating { get; set; }
public int SelectedRating { get; set; }
public IEnumerable<SelectListItem> RatingList { get; set; }
}
EDIT: ---
Details anzeigen (Haupt)
@model xxxx.Review
@{
ViewBag.Title = "Details";
}
@*@{
//var newRating = new xxxx.ViewModel.RateReviewVM { ReviewId = Model.Id };
@Html.RenderPartial("_RatingPartial", newRating)
}*@
<h2>Details</h2>
<div>
<h4>Review</h4>
<hr/>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Title)
</dt>
<dd>
@Html.DisplayFor(model => model.Title)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Description)
</dt>
<dd>
@Html.DisplayFor(model => model.Description)
</dd>
@* and so on.. *@
</dl>
</div>
<p>
@Html.ActionLink("Back to List", "Index")
</p>
Controller für Einzelheiten
public ActionResult Details(Guid? id) {
Review review = db.Reviews.Find(id);
return View(review);
}
Modell Bewertung für Einzelheiten
public System.Guid Id { get; set; }
public System.Guid CreatorUserId { get; set; }
[Required]
public string Title { get; set; }
[Required]
public string Description { get; set; }
public System.DateTime CreatedDate { get; set; }
//etc - some irrelevant property
public virtual ICollection<RateReview> Users { get; set; }
Ihre 'RenderPartial()' initialisiert gerade eine neue Instanz von 'RateReviewVM' und Sie haben die' RatingList' Eigenschaft dieser Instanz nicht gefüllt (ihre 'null', daher die Ausnahme). Warum benutzt du 'RenderPartial()'? Und was ist das Modell in der Hauptansicht? –
@StephenMuecke Ich dachte, das war das richtige um ein Partial anzuzeigen. Was sollte ich stattdessen verwenden? – skylake
Ihre GET-Methode schlägt vor, dass das Modell in der Hauptansicht bereits 'RateReviewVM' ist. Was ist der Sinn von' RenderPartial() '? Verschieben Sie einfach den Code in der '_RatingPartial.cshtml' Datei in die' Rating.cshtml' Datei und löschen Sie 'RenderPartial()' –