我从控制器开始
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; }
}
}
我可能会为所有这些意大利面烧在地狱里,但我希望有一个我想念的简单解决方案(除了将几个视图粘在一起)。
答案 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个小时试图解决这个问题。我感谢大家的帮助。
我希望这可以帮助除了我自己以外的人。谢谢大家。