【发布时间】:2013-12-15 06:56:19
【问题描述】:
我有 ViewModel
public class Magazine_ViewModel
{
public int MagId { get; set; }
public string MagNo { get; set; }
public IEnumerable<Titles_ViewModel> Titles { get; set; }
}
public class Titles_ViewModel
{
public int TitleId { get; set; }
public string TitleName { get; set; }
public int pos { get; set; }
}
在控制器中我喜欢这样
var viewModel = new Magazine_ViewModel
{
Titles = numberTitles
.Select(c => new Titles_ViewModel
{
TitleId = c.TitleId,
TitleName = c.Title.TitleText,
pos=c.position
}).ToList()
};
viewModel.MagNo = magazine.MagNo.ToString();
viewModel.MagId = magazine.Id;
当我检查 viewModel.Titles 有 n 条记录时,这是正确的。 现在在视图部分
<div class="editor-label">
@Html.LabelFor(model => model.MagNo)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MagNo)
</div>
<div class="editor-field">
@Html.ListBox("wholeTitles")
<input type="button" name="add" id="add" value="add" onclick="addValue()" /><input type="button" name="remove" id="remove" value="remove" onclick="removeValue()"/>
@Html.ListBoxFor(model => model.Titles, new SelectList(Model.Titles, "TitleId", "TitleName"))
</div>
<p>
<input type="submit" value="Save" />
</p>
我将新标题从第一个 ListBox(wholeTitles) 添加到第二个 ListBox(Titles)。现在提交按钮被按下,我想将新标题添加到数据库中。
这就是我在 Post Action 中所做的事情
[HttpPost]
public ActionResult EditTitle(Magazine_ViewModel magazineViewModel)
{
if (ModelState.IsValid)
{
var magazineTitles = new Magazine
{
Id = magazineViewModel.MagId,
NumberTitles = new List<NumberTitle>()
};
foreach (var numberTitle in magazineViewModel.Titles)
{
NumberTitle newNumberTitle = new NumberTitle();
newNumberTitle.MagazineId = magazineViewModel.MagId;
newNumberTitle.TitleId = numberTitle.TitleId;
newNumberTitle.position = 0;
unitOfWork.NumberTitleRepository.Insert(newNumberTitle);
}
}
return View();
}
但是 magazineViewModel.Titles 显示为 null,我不知道我应该检查什么才能看到它为什么是 null 值。
【问题讨论】:
-
您的提交是否包含在 Html.BeginForm 中?如果可以,请更新代码的外观。还有什么是 POST Action 方法签名?
-
是的,它在 BeginForm 部分内。当我提交 EditTitle 获得焦点时,magazineViewModel 具有 MagNo 和 MagId 的值,但 Titles 为空
-
我认为如果您使用隐藏字段,您可以将值传递回服务器。请参阅下面的答案。
标签: asp.net-mvc asp.net-mvc-3 model-view-controller