日期:2014-05-17  浏览次数:20481 次

MVC的controller传model给view同时赋值问题
自学MVC,开发一个小型的论坛系统。

用户在发帖的时候,访问的是 Title/Create/{ForumID}

下面是Controller,我的想法是在新建title时将title的ForumID赋值
C# code

        public ActionResult Create(int id)
        {
            Title title = new Title()
            {
                ForumID = id
            };
            return View(title);
        }



C# code

        [AcceptVerbs(HttpVerbs.Post), Authorize]
        public ActionResult Create(Title title)
        {
            UserRepository userRepository = new UserRepository();
            if (ModelState.IsValid)
            {
                try
                {
                    title.CreateUserID = userRepository.GetUser(User.Identity.Name).aspnet_User.UserId;
                    title.CreateTime = DateTime.Now;
                    titleRepository.Add(title);
                    titleRepository.Save();
                    return RedirectToAction("Details", new { id = title.TitleID });
                }
                catch(Exception ex)
                {
                    ModelState.AddRuleViolations(title.GetRuleViolations());
                    Response.Write(ex.Message);
                }
            }
            return View(title);
        }



结果报错,在追踪时发现第二个Create Controller里,title对象的ForumID值又变为0了。
难道public ActionResult Create(Title title)接收的title不是public ActionResult Create(int id)传过去的。
如果该方法行不通的话,public ActionResult Create(Title title)如何获取当前页面Route的id值。

------解决方案--------------------
一般地说,都是在数据库里面配置一个自动增长的id,没必要这么写。
------解决方案--------------------
将id 放进一个控件中; 如: @Html.HiddenFor(x => x.ID)