控制器:
public ActionResult Edit(int id)
{
SetViewData();
var rule = _db.AlertRules.Find(id);
ViewData["rule"] = rule.Feed.Name + " - "
+ rule.Template.Name;
return View(rule);
}
//
// POST: /AlertRule/Edit/5
[HttpPost]
public ActionResult Edit(AlertRule alertrule)
{
SetViewData();
alertrule.UpdateDateTime = DateTime.Now;
if (ModelState.IsValid)
{
_db.Entry(alertrule).State = EntityState.Modified;
_db.SaveChanges();
return RedirectToAction("Index");
}
else
{
TempData["error"] = "Cant update rule({0})"
+ alertrule.Id;
}
return View(alertrule);
}
private void SetViewData()
{
var feeds = new SelectList(_db.Feeds.OrderBy(f => f.Name), "Id", "Name");
var templates =
new SelectList(_db.AlertRuleTemplates.OrderBy(f => f.Name), "Id", "Name");
ViewData["templates"] = templates;
ViewData["feeds"] = feeds;
}
视图:
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Edit</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.FeedId)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.FeedId, (SelectList)ViewData["feeds"])
@Html.ValidationMessageFor(model => model.FeedId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.TemplateId)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.TemplateId,
(SelectList)ViewData["templates"])
@Html.ValidationMessageFor(model => model.TemplateId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Enable)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Enable)
@Html.ValidationMessageFor(model => model.Enable)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Alertrule)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Alertrule)
@Html.ValidationMessageFor(model => model.Alertrule)
</div>
<div class="editor-label" style="display: none">
@Html.LabelFor(model => model.UpdateDateTime)
</div>
<div class="editor-field" style="display: none">
@Html.EditorFor(model => model.UpdateDateTime)
@Html.ValidationMessageFor(model => model.UpdateDateTime)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
表单数据:
Id:33
FeedId:1
TemplateId:1
Enable:false
Alertrule:00000
UpdateDateTime:12/10/2012 3:02:15 PM
答案 0 :(得分:3)
这是一个常见的问题。模型中似乎有一个Alertrule
属性与您的操作参数名称冲突。所以重命名你的行动论点:
[HttpPost]
public ActionResult Edit(AlertRule model)
或重命名AlertRule
属性名称以避免冲突。
问题是以下属性:
Alertrule:00000
由于您的action参数的调用方式与默认模型绑定器尝试将值00000
绑定到明显失败的alertRule
参数的方式相同。