我创建了一个视图模型,让用户编辑其中一个属性。在postbac / submit上,用户编辑的属性是正确的,但其他属性重置为默认(null)值。
在lower方法中,我想访问Shift属性,但它是null。
我做错了什么?
谢谢,
丹麦安德斯
public async Task<ActionResult> Status(int shiftId)
{
var shift = await _shiftRepository.GetByIdAsync(shiftId);
var transition = await _shiftChangeRepository.GetByIdAsync(shiftId);
if (!_permissionService.CurrentUserMayViewShift(shift,transition))
{
return RedirectToAction("NotAllowed");
}
// No prior transaction => ask user what to do
if (transition == null)
{
var transitionStartModel = new TransitionStartModel(){Shift = shift};
return View(transitionStartModel);
}
return null;
}
-
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Status(TransitionStartModel model)
{
if (ModelState.IsValid)
{
try
{
if (model.EnumTransitionTypes == EnumTransitionTypes.ReportSick)
{
return RedirectToAction("StartFlowReportSick");
}
return RedirectToAction("Index", "Home");
}
catch (Exception e)
{
ModelState.AddModelError("", e.Message);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
答案 0 :(得分:2)
控制器仅接收页面发送给它的值。如果你不把它们放在页面中,他们就不会在那里。
如果您愿意,可以将它们放在隐藏字段中,或者从数据存储中检索原始对象,只更新您希望用户修改的一个属性(这样可以防止任何人篡改他们不会使用的值。应该改变,这就是我建议你为大多数价值做的事情。)
答案 1 :(得分:1)
在您的视图中,对于您可能希望显示但不想编辑的字段,并且您希望在请求中返回值,请使用&#34; HiddenFor&#34;
@Html.HiddenFor(m => m.MyFieldThatWontBeEdited)
@Html.HiddenFor(m => m.MyDisplayOnlyField)