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