2014-02-21 59 views
2

我的控制器:ASP MVC EF多選HTTP POST

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(BlogCompModel blogmodel) 
{ 
    if (ModelState.IsValid) 
    { 
     ... 
    } 
} 

筆者認爲:在後

@model BlogProject.Models.BlogCompModel 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    ... 


    <div class="form-group"> 
     @Html.LabelFor(model => model.BlogCompModel.posts, "Property", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
     @Html.ListBoxFor(model => model.posts, new MultiSelectList(Model.posts, "post_ID", "postTitle")) 
     @Html.ValidationMessageFor(model => model.posts.posts) 
     </div> 
    </div> 

} 

錯誤消息:

"The parameter conversion from type 'System.String' to type 'BlogProject.Models.Posts' failed because no type converter can convert between these types."} System.Exception {System.InvalidOperationException} 

正如您所看到的,我不確定如何將HTML Multiselect列表從Post_ID集合轉換爲文章的ICollection。

謝謝!

+0

我不處理多用MVC,但這裏是一個鏈接,可以幫助你(HTTP://論壇。 asp.net/t/1778536.aspx) – James

回答

1

您可以在BlogCompModel模型中添加其他屬性,它會將所有選定的帖子包裹在其中。

public class BlogCompModel 
{ 
    // 
    public string[] selectedPosts { get; set; } 
} 

然後在您的視圖:

@Html.ListBoxFor(model => model.selectedPosts , 
       new MultiSelectList(Model.posts, "post_ID", "postTitle")) 
@Html.ValidationMessageFor(model => model.selectedPosts) 
+0

是否有可能將返回類型從視圖綁定到我的模型(ICollection)中的類型?或者我是否需要遍歷我的控制器的基本類型並填充ICollection? – syllogistic

+0

是的,這是可能的。我不知道你的'BlogCompModel'模型是什麼樣的,但是你提供的代碼只需要添加一個字段。如果您想了解更多關於將列表綁定到模型的信息,請查看以下鏈接:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ – Lin

0

在我的博客MVC應用程序,我有一個多選標記,並在這裏我怎麼添加那些郵政創建行動。

Index.cshtml

@model MyBlog.Core.Post 

@Html.ListBox("PostTags", (MultiSelectList)ViewBag.MultiSelectList, new { @class = "form-control" }) 

控制器

public ActionResult CreatePost([Bind(Include = "Id,Title,ShortDescription,Description,Published,PostedOn,ModifiedOn,CategoryId")] Post post, int[] postTags) 
     { 
      if (postTags != null) 
      { 
       foreach (var t in postTags) 
       { 
        var tag = _dbTag.GetById(t); 
        post.Tags.Add(tag); 
       } 
      } 
      // save to database and other stuff 
      return View(post); 
     }