我是否需要在填充下拉列表时将数据从控制器传递到视图?

时间:2013-01-08 09:45:20

标签: c# asp.net-mvc asp.net-mvc-3 razor-2

我正在学习asp.net mvc,我刚刚开始,我决定从网页表格转移到mvc。

我很好奇,因为我有这段代码,我想知道在return View(data)中传递模型而不传递它的区别。

以下是代码:

控制器

/* Even if I comment/remove the lines ViewBag.GenreId....... and ViewBag.ArtistId
   and just return View(); everything seems to work fine. I'm following this music store tutorial from codeplex
*/

[HttpPost]
public ActionResult Create(Album album)
{
     if (ModelState.IsValid)
     {
          db.Albums.Add(album);
          db.SaveChanges();
          return RedirectToAction("Index");  
     }
     //this will assign the values of the dropdownlist of the View
     //it will assign the values on the dropdownlist that has a name GenreId
     ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
     ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
     return View(album);
}

视图代码

@model CodeplexMvcMusicStore.Models.Album

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Album</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.GenreId, "Genre")
        </div>
        <div class="editor-field">
            @Html.DropDownList("GenreId", String.Empty)
            @Html.ValidationMessageFor(model => model.GenreId)
        </div>

我还想知道在View(album)中传递对象模型与传递它View()之间的区别。

3 个答案:

答案 0 :(得分:2)

据我所知,如果您没有通过该模型,那么您的页面将不会被填充。

当您将表单发回时,它也不会知道将值绑定到何处。

答案 1 :(得分:1)

如果您没有传递数据,则无法访问剃须刀中的数据。您需要将模型传递给return View(model)才能在Razor View上使用它。如果您需要传递多个模型,则可以使用ViewBagViewData来执行此操作。

通过查看你的问题。在我看来,您可以在MVC DropDownListFor tutorial

中找到答案

答案 2 :(得分:0)

如果您未在返回视图(相册)中传递对象模型,则在视图中不会显示任何验证错误(如果有)。当您使用ViewBag for GenreId和ArtistId时,您可以在视图中渲染而不通过对象模型进行查看(返回由Karthik发布的View())