2016-12-18 45 views
-1

我想做一個表格更新與下拉列表和一個框來輸入文本,但不斷得到標題中的錯誤。它直接從create cshtml複製。有沒有ViewData項的類型'IEnumerable <SelectListItem>'有關鍵AnnouncementId

Index.cshtml:

@model Announcements1.Models.Comment 



<div id="CommentDiv"></div> 
<div id="CommentCreateForm"> 

     @using (Ajax.BeginForm("AjaxCreate", "Comments", 
           new AjaxOptions 
           { 
            InsertionMode = InsertionMode.Replace, 
            HttpMethod = "POST", 
            UpdateTargetId = "CommentDiv" 
           })) 
     { 

      @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
      <div class="form-group"> 
       @Html.LabelFor(model => model.CommentContent, htmlAttributes: new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.EditorFor(model => model.CommentContent, new { htmlAttributes = new { @class = "form-control" } }) 
        @Html.ValidationMessageFor(model => model.CommentContent, "", new { @class = "text-danger" }) 
       </div> 
      </div> 

      <div class="form-group"> 
       @Html.LabelFor(model => model.AnnouncementId, "AnnouncementId", htmlAttributes: new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.DropDownList("AnnouncementId", null, htmlAttributes: new { @class = "form-control" }) 
        @Html.ValidationMessageFor(model => model.AnnouncementId, "", new { @class = "text-danger" }) 
       </div> 
      </div> 
     } 
    </div> 


@section Scripts { 
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
    <script src="~/Custom_Scripts/BuildCommentTable.js"></script> 
    @Scripts.Render("~/bundles/jqueryval") 
    } 

CommentController:

public ActionResult BuildCommentTable() 
     { 
      var comments = db.Comments.Include(c => c.Announcement); 
      return PartialView("_CommentTable", GetMyComments()); 
     } 






[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult AjaxCreate([Bind(Include = "CommentId,CommentContent,AnnouncementId")] Comment comment) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Comments.Add(comment); 
       db.SaveChanges(); 

      } 

      ViewBag.AnnouncementId = new SelectList(db.Announcements, "AnnouncementId", "AnnouncementContent", comment.AnnouncementId); 
      return PartialView("_CommentTable", db.Comments.Include(c => c.Announcement)); 
     } 

和我的JS文件:

$(document).ready(function() { 
    $.ajax({ 
     url: '/Comments/BuildCommentTable', 
     success: function (result) { 
      $('#CommentDiv').html(result); 
     } 
    }); 

}); 
+0

您是否搜索過? :https://www.google.com.pk/search?q=There+is+no+ViewData+item+of+type+%27IEnumerable%3CSelectListItem%3E%27&oq=There+is+no+ViewData+item+of + type +%27IEnumerable%3CSelectListItem%3E%27&aqs = chrome..69i57j69i60.182j0j4&sourceid = chrome&ie = UTF-8 –

+0

@EhsanSajjad是的,但我無法找出問題 –

+0

錯誤的意思是'AnnouncementsId' in'@ Html.DropDownList(「 AnnouncementId「,null,...)''null' –

回答

1

首先,你缺少的代碼來填充產品消息的DropDownList數據在BuildCommentTable操作中,在返回視圖之前添加它,就像在Post操作中一樣。

其次該名稱的ViewBag鍵與您的Model屬性,你的這兩個動作應該有ViewBag populationo這樣的:

ViewBag.AnnouncementOptions= new SelectList(db.Announcements, "AnnouncementId", "AnnouncementContent", comment.AnnouncementId); 

讓你取得動作會是這樣:

public ActionResult BuildCommentTable() 
{ 
    ViewBag.AnnouncementOptions= new SelectList(db.Announcements, "AnnouncementId", "AnnouncementContent"); 
    var comments = db.Comments.Include(c => c.Announcement); 
    return PartialView("_CommentTable", GetMyComments()); 
} 

同樣的方式更改帖子操作方法ViewBag人口代碼部分還有:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult AjaxCreate([Bind(Include = "CommentId,CommentContent,AnnouncementId")] Comment comment) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Comments.Add(comment); 
     db.SaveChanges(); 
    } 

    ViewBag.AnnouncementOptions = new SelectList(db.Announcements, "AnnouncementId", "AnnouncementContent", comment.AnnouncementId); 
    return PartialView("_CommentTable", db.Comments.Include(c => c.Announcement)); 
} 

現在在你看來,你應該能夠使用強類型的輔助方法DropDownListFor這樣:

<div class="col-md-10"> 
    @Html.DropDownListFor(x=>x.AnnouncementId, ViewBag.AnnouncementOptions as SelectList, htmlAttributes: new { @class = "form-control" }) 
    @Html.ValidationMessageFor(model => model.AnnouncementId, "", new { @class = "text-danger" }) 
</div> 

希望它可以幫助你。

+0

謝謝!我得到的唯一問題是在buildCommentTable是沒有參考最後一個參數「評論」 –

+0

你可以刪除它,它是一個可選參數 –

+0

不幸的是即使你的編輯,我仍然得到一個錯誤,同一個@ html.dropdownlistfor –

相關問題