我有第二个模型我试图填写一个视图并返回。 MVC 5

时间:2016-04-19 06:19:16

标签: asp.net-mvc data-annotations models

我从控制器开始

ViewBag.EmailStuff = new EmailStuff();

然后在View中,我尝试获取此模型,因为View基于另一个模型。

 @{var es = ViewBag.EmailStuff as EmailStuff;}


@using (Html.BeginForm("ContactStore", "Store", FormMethod.Post, new {emailstuff=es))

我让Validaton为这两个字段工作,如果它们为空则触发

@Html.EditorFor(m => es.EventName)
@Html.ValidationMessageFor(m => es.EventName, "", new { @class = "text-danger-yellow" })
<br />

@Html.EditorFor(m => es.MessageBody)
@Html.ValidationMessageFor(m => es.MessageBody, "", new { @class = "text-danger-yellow" })

但如果字段中包含信息,我无法弄清楚如何将值传递给控制器​​。

在控制器上,我引用的模型为两个输入返回空值,即使DataAnnotations有效。

我知道这是一个黑客。我试图摆脱Forms集合并学习如何使用模型。 视图本身使用的模型与我尝试验证的模型不同。 在视图的顶部,您可以看到与我发送给电子邮件的2个字段无关的其他模型。

@model Stores.Models.vProfiles
@using Microsoft.AspNet.Identity
@using Microsoft.AspNet.Identity.EntityFramework
@using Stores.Models  

这是信息应该进入的地方:

public ActionResult ContactStore(EmailStuff emailstuff)
{

这是我的模特:

    public class EmailStuff
    {
        [Required(ErrorMessage = "Enter an event name")]
        public string EventName { get; set; }
        [Required(ErrorMessage = "You need to enter a message")]
        public string MessageBody { get; set; }


    }
}

我可能会为所有这些意大利面烧在地狱里,但我希望有一个我想念的简单解决方案(除了将几个视图粘在一起)。

2 个答案:

答案 0 :(得分:0)

就像@Stephen所说的那样回归同样的模型;

var emailStuff = new EmailStuff();
emailStuff = ViewBag.EmailStuff;
return View(emailStuff);

并在视图中使用这样的。

@Html.EditorFor(m => m.EventName)
@Html.ValidationMessageFor(m => m.EventName, "", new { @class = "text-danger-yellow" })

之后,当您发布表单时,您应该在控制器端获取所需的数据。

答案 1 :(得分:0)

所以我制作了一个大模型来容纳这两个模型。

public class MainPageModel
    {
    public Model1 Model1
        { get; set; }
    public Model2 Model2
        { get; set; }
    }

然后我在打开View的ActionResult中填充了其中一个。 (另一个是收集电子邮件主题和邮件主体。)

Model.Model1 = context.myTable(where whatever = id)

并将大型模型发送到View

return View(Model)

在视图中,我在顶部宣布了大型模型

@model myAppName.Models.Model

并填充了一堆@ Html.DisplayFor(m =&gt; m.Model.Model1)(注意我是如何引用子模型的......我正在学习!)

另一个模型用于使用

获取电子邮件消息
@TextAreaFor (m=>m.Model.Model2)

现在,在Form Submit上,大型模型进入了我想要的ActionResult,但是 Model.Model1为null!去搞清楚。我不得不将Model.Model1.AccountID放入@Html.HiddenFor 在将任何内容返还给控制器之前。

为什么呢?好吧,在拔出一半头发后,有人在工作时告诉我,如果不在@Html.EditorFor或@ Html.HiddenFor中编辑它就无法传递模型。 。 。 。 @ Html.DisplayFor不会做这个工作 。 。 。 .so,我使用@ Html.Hiddenfor将我的AccountID重新输入控制器。我可以看到模型是它进来了,但是在我使用HiddenFor之前它是空的。

你每天都学到新东西。太糟糕了,我花了8个小时试图解决这个问题。我感谢大家的帮助。

我希望这可以帮助除了我自己以外的人。谢谢大家。