我有视图,想要在用户点击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。为什么数据为空,我在上一次调用中设置了值?