Спасибо Дарину.Я принял его ответ.Полное решение опубликовано для удобства других читателей.
Примечание: EditorTemplate помог избежать цикла foreach и помог в правильном связывании объектов.
Примечание: EditorTemplate должен быть помещен в соответствующую папкуи имя файла должно основываться на соглашении.
// Модель
namespace MyProgramRatingApp
{
public enum RatingEnum { Poor = 0, Neutral, Good, Excellent };
public class Program
{
public int ProgramID { get; set; }
public string ProgramName { get; set; }
public RatingEnum Rating { get; set; }
public string ProgramCategory { get; set; }
}
}
// Контроллер
using System;
using System.Collections.Generic;
using System.Web.Mvc;
namespace MyProgramRatingApp.Controllers
{
public class ProgramController : Controller
{
List<Program> programList = new List<Program>()
{
new Program
{
ProgramID = 1,ProgramName = "Program1",
ProgramCategory = "A"
},
new Program
{
ProgramID = 2,ProgramName = "Program2",
ProgramCategory = "B"
},
new Program
{
ProgramID = 3,ProgramName = "Program3",
ProgramCategory = "A"
}
};
// GET: /Program/
public ActionResult CastVote()
{
ViewBag.RatingEnum = GetRstingSelectList();
return View(programList);
}
// POST: /StoreManager/Create
[HttpPost]
public ActionResult CastVote(IEnumerable<Program> theProgramList)
{
if (ModelState.IsValid)
{
//Save the book in DB first and then redirectToAction.
return RedirectToAction("CastVote");
}
return View(theProgramList);
}
public static SelectList GetRstingSelectList()
{
Array values = Enum.GetValues(typeof(RatingEnum));
List<System.Web.UI.WebControls.ListItem> items = new List<System.Web.UI.WebControls.ListItem>(values.Length);
foreach (var i in values)
{
items.Add(new System.Web.UI.WebControls.ListItem
{
Text = Enum.GetName(typeof(RatingEnum), i),
Value = ((int)i).ToString()
}
);
}
return new SelectList(items);
}
}
}
Представление (CastVote.cshtml)
@model IEnumerable<MyProgramRatingApp.Program>
@{
ViewBag.Title = "CastVote";
}
<h2>CastVote</h2>
@using (Html.BeginForm())
{
<table>
<tr>
<th style="border:1px solid Teal; background-color:Gray">
ProgramName
</th>
<th style="border:1px solid Teal; background-color:Gray">
ProgramCategory
</th>
<th style="border:1px solid Teal; background-color:Gray"> </th>
</tr>
@Html.EditorForModel()
</table>
<p>
<input type="submit" value="Cast Vote" />
</p>
}
EditorTemplate (Program.cshtml)
@model MyProgramRatingApp.Program
<tr>
<td style="border:1px solid Teal">
@Html.DisplayFor(x => x.ProgramName)
@Html.HiddenFor(x => x.ProgramName)
</td>
<td style="border:1px solid Teal">
@Html.EditorFor(x => x.ProgramCategory)
</td>
<td style="border:1px solid Teal">
@Html.DropDownListFor(x => x.Rating, (SelectList)ViewBag.RatingEnum, String.Empty)
</td>
<td>
@Html.HiddenFor(x => x.ProgramID)
</td>
</tr>