MVC 4模型值未传递给控制器​​操作

时间:2013-10-15 11:25:16

标签: asp.net-mvc-4 razor

我有视图,想要在用户点击NEXT按钮时逐个显示会话中存储的对象的内容。 View使用WorldModel对象来显示数据。 Id是隐藏字段,内容应显示在页面上。

查看:

@model MvcApplication4.Models.WorldModel
@{
    ViewBag.Title = "View1";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>View1</h2>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

    <fieldset>
        @Html.HiddenFor(model => model.Id)
        @Html.DisplayFor(model => model.Content)
        <input type="submit" value="Next" />
    </fieldset>
}

模型:此类包含两个属性id和content。基本上,id被映射到候选者ID,而Content被映射到候选者名称。

namespace MvcApplication4.Models
{
    public class WorldModel
    {
        public int Id { get; set; }
        public string Content { get; set; }
    }
}

控制器:类有两个动作方法,一个不接受任何参数,另一个接受WorldModel作为参数。

namespace MvcApplication4.Controllers
{
    public class WorldController : Controller
    {
        //
        // GET: /World/

        public ActionResult View1()
        {
            List<Candidate> obj = new List<Candidate>();
            obj.Add(new Candidate() { Id = 1, Name = "ABCD", IsNameDispalyed = false});
            obj.Add(new Candidate() { Id = 2, Name = "PQR", IsNameDispalyed = false });
            obj.Add(new Candidate() { Id = 3, Name = "XYZ", IsNameDispalyed = false });

            CandidateSession cs = new CandidateSession(){Candidates=obj};
            Session["Can"] = cs;
            return View();
        }

        [HttpPost]
        public ActionResult View1(WorldModel worldModel)
        {
            CandidateSession cs = (CandidateSession)Session["Can"];
            var can1 = cs.Candidates.Where(x => x.IsNameDispalyed == false).First();
            can1.IsNameDispalyed = true;
            return View(new WorldModel() {Id=can1.Id, Content=can1.Name });
        }
    }

    public class Candidate
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsNameDispalyed { get; set; }
    }

    public class CandidateSession
    {
        public List<Candidate> Candidates { get; set; }
    }
}

当我以“../World/View1”访问URL时,它会将数据填充到会话对象,然后单击“下一步”按钮调用操作public ActionResult View1(WorldModel worldModel)。在方法中,我得到的信息没有显示的对象返回带有id和Content的WorldModel对象的视图。现在第一次显示内容,但是当我单击“下一步”按钮时,它会调用操作public ActionResult View1(WorldModel worldModel)。但是worldModel对象的id和Content值为null。为什么数据为空,我在上一次调用中设置了值?

0 个答案:

没有答案