在 ASP.Net MVC 中,我从另一个视图打开一个视图。第一个视图将两个值发送到第二个视图。在第二个视图中,用户可以发送电子邮件。
我有两个问题。
第一个问题是我从第一个视图发送的两个值没有显示在我的第二个视图中。
第二个问题是我无法在控制器中获取电子邮件表单来触发我的电子邮件功能。
这里有更详细的解释。
我的第一个名为 ViewOne 的视图正在使用控制器 ControllerOne。在 ViewOne 中,我有以下代码来调用第二个视图 ViewTwo:
@Html.ActionLink("Go to second view", "ViewTwo", "Home", new { firstval = firstval, secondval = secondval }, null)
单击 ActionLink 时,会调用控制器 HomeController 中的以下函数:
public ActionResult ViewTwo(string firstval, string secondval)
{
MyModel model = new MyModel();
model.firstval = firstval;
model.secondval = secondval;
var list = new SelectList(new[]
{
new {ID="1",Name="One"},
new{ID="2",Name="Two"},
new{ID="3",Name="Three"},
},
"ID", "Name", 1);
model.myList = list;
return View(model);
}
因此,在控制器 HomeController 中,我尝试使用从第一个视图 ViewOne 获得的值填充模型 myModel。
MyModel 模型如下所示:
public class MyModel
{
public string firstval { get; set; }
public string secondval { get; set; }
public IEnumerable<SelectListItem> myList { get; set; }
[Required]
[DisplayName("My name")]
public string reporter { get; set; }
[Required]
[DisplayName("Description")]
public string description { get; set; }
[DisplayName("Dropdown")]
public string myDropDownListValue { get; set; }
}
视图 ViewTwo 如下所示:
@model myapp.Models.MyModel
@{ ViewBag.Title = "Send e-mail"; }
<hgroup class="title">
<h1>@ViewBag.Title</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
@using (Html.BeginForm("sendEmail"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Send e-mail</legend>
<p>First value:</p>
<p>@Html.LabelFor(m => m.firstval)</p>
<p>Second value:</p>
<p>@Html.LabelFor(m => m.secondval)</p>
<p>Reporter</p>
<p>@Html.TextBoxFor(m => m.reporter)</p>
<p>Dropdownlist</p>
<p>@Html.DropDownListFor(m => m.myDropDownListValue, Model.myList as SelectList)</p>
<p>Description:</p>
<p>@Html.TextAreaFor(m => m.description, new { @cols = 150, @rows = 5})</p>
<input type="submit" value="Send e-mail"/>
</fieldset>
}
在控制器 HomeController 中,它是具有 ViewTwo() 函数的控制器,该函数在上面的表单被绘制之前被触发,我有以下函数:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult sendEmail(ContactModel model) // (string keyword, string partofspeech, string reporter, string category, string description, string acceptance)
{
// code to send email
}
所以我希望这个函数 sendEmail 在我提交表单时被触发。但这不会发生。当我单击提交按钮(标记为“发送电子邮件”)时发生的情况是视图 ViewTwo 被重新加载并且控制器 HomeController 中的 ActionResult ViewTwo() 被触发。这是我的第二个(也是最大的)问题。
另外,我的第一个问题是
<p>@Html.LabelFor(m => m.firstval)</p>
不显示从第一个视图发送的值。它显示字符串“firstval”。在绘制表单之前,我可以在函数 ViewTwo() 中看到该值是从第一个视图正确发送的。
有任何想法吗?
编辑:
第二个问题解决了。请看我下面的回复。