关于这个问题我提到了几个问题(Q1,Q2),但我认为我的情况略有不同。
我创建了一个登录页面,成功登录后应打开家庭控制器的索引视图。由于我的索引视图需要Model来绑定表数据,我需要在Login按钮操作中传递Model对象和视图。我希望你能得到这个场景。
这是我的登录控制器:
public ActionResult Login() //Get Method for Login
{
return View("Login");
}
[HttpPost] // Post Method on Login
public ActionResult Defaults(string username, string password)
{
FloorFactor ff = new FloorFactor(); // tried to create model object to pass in view
try
{
Login_Details login_detail = db.Login_Details.Single(x => (x.UserName == username) && (x.Password == password));
if (login_detail != null)
{
return View("../Home/Index",ff ); // need to get view Index of home controller.
}
}
catch { }
return View("Login");
}
Index.cshtml的必需部分
@model IEnumerable<Pricing_Tool_Test.FloorFactor>
@{
ViewBag.Title = "Index";
}
我知道模型需要不可忽略的模型对象,但在我的默认方法中,它不允许我传递模型的IEnnumerable对象。
任何帮助我如何实现这一目标?
编辑:
两个控制器都不同。登录按钮需要加载Homecontroller的视图。它会在图像中生成异常。如果我评论该行而不是上面提到的错误。 :
编辑2:主页/创建编码
public PartialViewResult Create()
{
return PartialView("_CreatePartial");
}
// POST: Home/Create
[HttpPost]
public ActionResult Create([Bind(Include = "FloorFactorPercentage,FromDate,ToDate")]FloorFactor floorfactor)
{
if (ModelState.IsValid)
{
db.FloorFactors.Add(floorfactor);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(floorfactor);
}
答案 0 :(得分:2)
您已经了解View
期待IEnumerable<Pricing_Tool_Test.FloorFactor>
并且您传递FloorFactor
的单个对象的问题。
您可以相应地填充模型并将其传递给视图,如 -
List<FloorFactor> model = new List<FloorFactor>();
model.Add(ff);
并将其传递给您的视图 -
return View("../Home/Index",new List<FloorFactor> { model} );
话虽如此,对我来说将空模型传递给这样的控制器是没有意义的。如果您不需要在视图中收集FloorFactor
,请将其仅与类型绑定,而不是IEnumerable
。
@model Pricing_Tool_Test.FloorFactor
修改 - 根据您的修改,我建议您重新考虑您的设计方法。
在较高级别,如果登录成功,请重定向到您的控制器的Get
操作,而不是POST
。您不应该将IEnumerable<FloorFactor>
实例传递给视图。现在,您应该在FloorFactor
内查看包含Form
个属性的控件。当用户填写这些详细信息时,请在表单提交时使用Create
调用POST
操作,并将更改保存在数据库中。
答案 1 :(得分:0)
在不使用IEnumerable的情况下尝试您的类名“FloorFactor”。因为您没有发送列表。 我认为这将解决您的问题。
@model Pricing_Tool_Test.FloorFactor
@{
ViewBag.Title = "Index";
}
答案 2 :(得分:0)
您必须返回IEnumerable对象。
或者在视图中,你需要把它放在没有IEnumerable的地方。
@model Pricing_Tool_Test.FloorFactor
@{
ViewBag.Title = "Index";
}