Asp.net mvc 为什么回发时我的模型属性重置为空?
我创建了一个视图模型,并允许用户编辑其中一个属性。在postbac/submit上,用户编辑的属性是正确的,但其他属性重置为默认(null)值 在较低的方法中,我希望访问Shift属性,但它为null 我做错了什么 谢谢 丹麦安德斯Asp.net mvc 为什么回发时我的模型属性重置为空?,asp.net-mvc,Asp.net Mvc,我创建了一个视图模型,并允许用户编辑其中一个属性。在postbac/submit上,用户编辑的属性是正确的,但其他属性重置为默认(null)值 在较低的方法中,我希望访问Shift属性,但它为null 我做错了什么 谢谢 丹麦安德斯 public async Task<ActionResult> Status(int shiftId) { var shift = await _shiftRepository.GetByIdAsync(shift
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;
}
控制器将只接收页面发送给它的值。如果你不把它们放在页面上,它们就不会在那里了
如果愿意,您可以将它们放置在隐藏字段中,或者从数据存储中检索原始对象,只更新您希望用户修改的一个属性(这将防止任何人篡改他们不应该更改的值,因此我建议您对大多数值都这样做)。在您的视图中,对于可能要显示但不想编辑的字段,以及希望返回请求中的值,请使用“HiddenFor”
你能澄清一下是什么问题吗。你说shift属性为null,你是说
await\u shiftRepository.GetByIdAsync(shiftId)代码>返回空值?如果是,如果ShiftId设置正确?请添加视图代码…您的输入是否正确?
[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);
}
@Html.HiddenFor(m => m.MyFieldThatWontBeEdited)
@Html.HiddenFor(m => m.MyDisplayOnlyField)