【问题标题】:How to bind dropdown list from action method in MVC 3 inside create view如何在创建视图中从 MVC 3 中的操作方法绑定下拉列表
【发布时间】:2015-11-19 08:32:52
【问题描述】:

我还想在创建视图时使用表单填充下拉列表。这是我的代码

@model CM.Models.TVSerialEpisode

@{
   ViewBag.Title = "AddEpisode";
}
@Html.Action("ListAllSeason","TvSerial") //here i want to call this action method so i could bind all tv serial
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>TVSerialEpisode</legend>



    <div class="editor-label">
        @Html.LabelFor(model => model.Serial_ID)
    </div>
    <div class="editor-field">

         @Html.DropDownList("Serial_ID", new List<SelectListItem>
        {
           new SelectListItem { Text = "Backstrom", Value="16" },
           new SelectListItem{Text="10 Things I hate about You", Value="15"},
           new SelectListItem { Text = "Castle", Value="14" }
      }, "Select Serial")
         @Html.ValidationMessageFor(model => model.Serial_ID)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Episode_No)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Episode_No)
        @Html.ValidationMessageFor(model => model.Episode_No)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Episode_Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Episode_Name)
        @Html.ValidationMessageFor(model => model.Episode_Name)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.File_Url_480p)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.File_Url_480p)
        @Html.ValidationMessageFor(model => model.File_Url_480p)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.File_Url_720p)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.File_Url_720p)
        @Html.ValidationMessageFor(model => model.File_Url_720p)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Description)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Description)
        @Html.ValidationMessageFor(model => model.Description)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Is_Active)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Is_Active)
        @Html.ValidationMessageFor(model => model.Is_Active)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

这里是模型类

namespace CM.Models
{

[Table("tbltvserial")]
public class TVSerial
{
    [Key]
    public Int64 Serial_ID { get; set; }
    public string Serial_Name { get; set; }
    public string Season_Name { get; set; }
    public int Season_No { get; set; }
    public int? Release_Year { get; set; }       
}
public class TVSerial_VM
{       
    public Int64 Serial_ID { get; set; }
    public string Serial_Name { get; set; }       
    public int Season_No { get; set; }            
}


[Table("tblserialepisode")]
public class TVSerialEpisode
{
    [Key]
    public Int64 Video_ID { get; set; }        
    public Int64 Serial_ID { get; set; }
    public int Episode_No { get; set; }
    public string Episode_Name { get; set; }       
    public string File_Url_480p { get; set; }
    public string File_Url_720p { get; set; }
    public string Description { get; set; }
    public bool Is_Active { get; set; }
    public DateTime Uploaded_Time { get; set; }     
}

public class TvSerialContext : DbContext
{
    public DbSet<TVSerialEpisode> TvSerialEpisodes { get; set; }
    public DbSet<TVSerial> TvSerials { get; set; }  
}
}

这里是控制器类

public class TvSerialController : Controller
{

    public List<TVSerial_VM> ListAllSeason()
    {
        try
        {
            TvSerialContext tvContext = new TvSerialContext();
            List<TVSerial_VM> tv = tvContext.TvSerials
                .Select(t => new TVSerial_VM
                {
                    Serial_Name = t.Serial_Name,
                    Season_No=t.Season_No,
                    Serial_ID=t.Serial_ID
                }).OrderBy(t=> t.Season_Name).
                  ToList();
            return (tv);
        }
        catch (Exception ex)
        {
            return null;
        }

    }
}

public class TvSerialEpisodeController : Controller
{

    TvSerialContext tvContext = new TvSerialContext();
    public ActionResult AddEpisode()
    {
        return View();
    }


    [HttpPost]
    public ActionResult AddEpisode(TVSerialEpisode tvEpisode)
    {
        if (ModelState.IsValid)
        {
            tvContext.TvSerialEpisodes.Add(tvEpisode);
            tvContext.SaveChanges();
            return RedirectToAction("AddEpisode");
        }

        return View(tvEpisode);
    }
}

我不知道如何在上面的视图页面中绑定 tvserial 列表。基本上我想从下拉列表中选择序列号,这是否可以在创建视图中调用操作方法。

【问题讨论】:

  • 在您的控制器中,ViewBag.SerialList = db.TvSerials.Select(x =&gt; new SelectListItem(){ Value = x.Serial_ID.ToString(), Text = x.Serial_Name }); 和视图中 @Html.DropDownListFor(m =&gt; m.Serial_ID, (IEnumerable&lt;SelectListItem&gt;)ViewBag.SerialList, "Select Serial")
  • 我应该在哪个控制器上写这段代码,因为我有两个控制器。
  • AddEpisode() 方法中(假设这是生成您显示的视图的方法。不清楚其他控制器的用途是什么?
  • 其他控制器有一个方法可以返回已经保存在数据库中的 tvserials 列表,其中包含一个主键 Serial_ID,它是 tbltvserialepisode 的外键。因为我不想在表单中手动填写serial_id,所以我需要一个下拉列表,我可以在其中选择序列名称,它将从下拉列表中获取所选值,就像我已经在下拉列表中创建了一个静态列表项,但我希望它们动态来自 tvserail 表
  • 然后使用.ToList() -db.TvSerials.ToList().Select(....实现查询

标签: asp.net-mvc-3


【解决方案1】:

要从数据库中填充您的 SelectList,请在控制器中使用 AddEpisode() 方法

ViewBag.SerialList = db.TvSerials.ToList().Select(x => new SelectListItem(){ Value = x.Serial_ID.ToString(), Text = x.Serial_Name });

然后在视图中使用

@Html.DropDownListFor(m => m.Serial_ID, (IEnumerable<SelectListItem>)ViewBag.SerialList, "Select Serial")

虽然建议您使用视图模型并在视图模型中包含 IEnumerable&lt;SelectListItem&gt; SerialList 属性,以便它是

@Html.DropDownListFor(m => m.Serial_ID, Model.SerialList, "Select Serial")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多