2
我在將數據綁定到集合項目集合時遇到問題(我也無法正確說明我的問題)。讓我們通過使用psudo模型的示例讓每個人都更容易。MVC添加和刪除子集合中的項目
可以說我有下面的例子型號:
public class Month()
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Week> Weeks { get; set; }
}
public class Week()
{
public int ID { get; set; }
public int MonthID { get; set; }
public String Name { get; set; }
public virtual ICollection<Day> Days { get; set; }
}
public class Day()
{
public int ID { get; set; }
public String Name { get; set; }
}
...和實例視圖模型:
public class EditMonthViewModel()
{
public Month Month { get; set; }
public List<Week> Weeks { get; set; }
public List<Day> AllDays { get; set; }
}
編輯動作/視圖的目的是使用戶編輯月,分配給該月的星期,以及從某個月的幾周添加和刪除日期。一個看法可能有幫助。
@model myProject.ViewModels.EditMonthViewModel
//...
@using (Html.BeginForm())
{
//Edit Month Stuff...
@for(int i = 0; i < Model.Weeks.Count(); i++)
{
<h2>@Model.Weeks[i].Name</h2>
@Html.EditorFor(model => Model.Weeks[i].Name)
//loop through all possible days
//Select only days that are assigned to Week[i]
@for(int d = 0; d < Model.AllDays.Count(); d ++)
{
//This is the focus of this question.
//How do you bind the data here?
<input type="checkbox"
name="I have no idea"
@Html.Raw(Model.Weeks[i].Days.Contains(Model.AllDays[d]) ? "checked" : "") />
}
}
}
控制器操作方法
public ActionResult Edit(int id)
{
var viewModel = new EditMonthViewModel();
viewModel.Month = db.Months.Find(id);
viewModel.Weeks = db.Weeks.Where(w => w.MonthID == id).ToList();
viewModel.AllDays = db.Days.ToList();
}
[HttpPost]
public ActionResult Edit(EditMonthViewModel viewModel)
{
var monthToUpdate = db.Months.Find(viewModel.Month.ID);
//...
if(viewModel.Weeks != null)
{
foreach (var week in viewModel.Weeks)
{
var weekToUpdate = monthToUpdate.Weeks.Single(w => w.ID == week.ID);
//...
/*So, I have a collection of weeks that I can grab,
but how do I know what was selected? My viewModel only has a
list of AllDays, not the days selected for Week[i]
*/
}
}
我怎麼能保證,當我提交表單選定日子將綁定到周?
你有什麼問題/錯誤體驗?我們可以看到你的控制器處理這個表單的行爲嗎? –
我也有興趣看到填充你的ViewModel的控制器動作。有趣的是,你的Month類已經有了Weeks的引用,並且間接引用了Days(到Weeks),但你已經將這些額外的字段添加到了你的ViewModel中。爲什麼? –
我添加了一些psudo操作方法。我是MVC的新手,我遵循一種理念,即視圖不應該運行查詢(在視圖模型中發送視圖所需的所有內容)。如果你不認爲這是必要的,那麼我當然可以改變事物。我的主要問題(我有困難闡述)是,我不知道複選框的「名稱」屬性需要爲模型聯編程序分配一天。我會再增加一小段來更好地解釋這種情況。 – jbaum012