传递模型对象以查看时出错

时间:2016-05-24 10:40:03

标签: asp.net-mvc asp.net-mvc-4

关于这个问题我提到了几个问题(Q1Q2),但我认为我的情况略有不同。

我创建了一个登录页面,成功登录后应打开家庭控制器的索引视图。由于我的索引视图需要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";
}

错误:enter image description here

我知道模型需要不可忽略的模型对象,但在我的默认方法中,它不允许我传递模型的IEnnumerable对象。

任何帮助我如何实现这一目标?

编辑:

两个控制器都不同。登录按钮需要加载Homecontroller的视图。它会在图像中生成异常。如果我评论该行而不是上面提到的错误。 :enter image description here

编辑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);

    }

Inner Exception Image

3 个答案:

答案 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";
}