为什么我的模型属性在回发后重置为null?

时间:2015-03-15 06:09:48

标签: asp.net-mvc

我创建了一个视图模型,让用户编辑其中一个属性。在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);
    }

2 个答案:

答案 0 :(得分:2)

控制器仅接收页面发送给它的值。如果你不把它们放在页面中,他们就不会在那里。

如果您愿意,可以将它们放在隐藏字段中,或者从数据存储中检索原始对象,只更新您希望用户修改的一个属性(这样可以防止任何人篡改他们不会使用的值。应该改变,这就是我建议你为大多数价值做的事情。)

答案 1 :(得分:1)

在您的视图中,对于您可能希望显示但不想编辑的字段,并且您希望在请求中返回值,请使用&#34; HiddenFor&#34;

    @Html.HiddenFor(m => m.MyFieldThatWontBeEdited)
    @Html.HiddenFor(m => m.MyDisplayOnlyField)