加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – Route Id覆盖Model.Id

发布时间:2020-12-16 07:19:42 所属栏目:asp.Net 来源:网络整理
导读:我有这样的路线: Conference/Committees/1 在该页面内,它循环通过会议委员会(会议ID = 1). 我有一个局部视图,为选定的委员会呈现一个编辑样式页面,其路径如下: Conference/Committees/1?committeeId=2 在调试中,模型数据是正确的,委员会的Id = 2.但是,当我
我有这样的路线:

Conference/Committees/1

在该页面内,它循环通过会议委员会(会议ID = 1).

我有一个局部视图,为选定的委员会呈现一个编辑样式页面,其路径如下:

Conference/Committees/1?committeeId=2

在调试中,模型数据是正确的,委员会的Id = 2.但是,当我使用以下Razor语句时:

@Html.HiddenFor(model => model.Id)

使用以下型号:

@model munhq.Models.Committee

隐藏输入的值为“1”而不是“2”.

这是MVC中的错误吗?或者我做错了什么?

更新

如果我更换

@Html.HiddenFor(model => model.Id)

<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="@Model.Id" />

它呈现正确的Id值.

更新2

public async Task<ActionResult> Committees(int id,PrivilegedAction? actionToTake,int? committeeId,ConferenceStatusMessage? csm)
    {
        Conference conference;
        HandleConferenceStatusMessage(csm);

        try
        {
            conference = await db.Conferences
            .Include(i => i.Committees.Select(c => c.CommitteeMemberCommitteeEntries))
            .Where(i => i.Id == id)
            .SingleAsync();

            HandleAction(actionToTake,conference);
            HandleAuthorisations(conference);
        }
        catch
        {
            return ConferenceActionFail();
        }

        if (committeeId == null)
        {
            if (conference.Committees.FirstOrDefault() == null)
            {
                committeeId = 0;
            }
            else
            {
                committeeId = conference.Committees.FirstOrDefault().Id;
            }

            ViewBag.ConferenceId = id; // used for adding a committee member entry

            return RedirectToAction("Committees",new { id = id,action = actionToTake,committeeId = committeeId,csm = csm });
        }
        else
        {
            if (CommitteeIsPartOfConference(conference,committeeId) || committeeId == 0)
            {
                ViewBag.SelectedCommittee = committeeId;
                ViewBag.JsonAvailableMembers = jsonAvailableCommitteeMembers(id);

                return View(conference);
            }
            else
            {
                return HttpNotFound();
            }
        }
    }

解决方法

在返回视图之前尝试使用它:

ModelState.Clear();

通常,在调用Action时,框架会根据查询字符串值,后期数据,路由值等构建ModelStateCollection.此ModelStateCollection将传递给View.在尝试从实际模型中获取值之前,所有HTML输入帮助程序都首先尝试从ModelStateCollection获取值.这就是为什么你的Html.HiddenFor扩展工作不正确(它首先检查ModelStateCollection)而你的< input type =“hidden”>包含正确的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读