【发布时间】:2019-12-25 01:46:44
【问题描述】:
项目的一点背景:
我是 asp.net 的新手,目前正在为一个学校项目苦苦挣扎,我需要为 GUI 制作一个原型,人们可以从中创建/更新/关闭产品状态,该产品状态将发送给人们产品出现问题时通过邮件发送。我的想法是垂直分割屏幕,您在左侧将写入邮件中应包含的信息(产品状态),右侧显示当前产品状态列表,您可以从中选择更新 og 关闭一个给定的。
问题:
我的问题是我找不到制作模型的多个实例的方法。我已经创建了一个测试模型、控制器和视图来了解如何做,现在将列出这些:
下面是我的模型,它将保存邮件的信息
public class ProductStatus {
public string MailTitel { get; set; } // Could be "The casino game Bonanza is not working"
public string Status { get; set; } // Could be "Start", "Ongoing", "Ended"
public string Description { get; set; } // Could be "Incident created at provider"
}
下面是我的控制器:
public class HomeController : Controller
{
List<ProductStatus> statusList = new List<ProductStatus> {};
public ActionResult Index()
{
ProductStatus model = new ProductStatus();
ViewData["Status"] = statusList;
return View(model);
}
public ActionResult SendMessages(ProductStatus status) {
statusList.Add(status);
ViewData["Status"] = statusList;
return View("Index");
}
}
为了测试我的实现,我创建了这个视图:
@{
ViewBag.Title = "Productstatus";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using DS_Prototype.Models
@model DS_Prototype.Models.ProductStatus
<!--Left side - Info filling -->
<div class="split left">
@using (Html.BeginForm("SendMessages", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.TextBoxFor(model => model.MailTitel)
<button type="submit" class="btn btn-block btn-login">Submit</button>
}
</div>
<!--Right side - Status overview -->
<div class="split right">
@foreach (ProductStatus status in ViewData["Status"] as List<ProductStatus>)
{
<a>@status.MailTitel</a>
}
</div>
当我填写左侧并单击按钮时,正确的字符串会显示在右侧,但是当我再次单击按钮时,它只会更新字符串并且不会在另一个字符串下显示新字符串。
我知道使用 ViewData 不是最佳方式,但我无法让 [httpPost] / [httpGet] 工作(我认为您可以通过某种方式使用它们)。
希望有人能帮助我,在此先感谢!
【问题讨论】:
-
每个请求都会生成一个新的控制器,因此 statusList 会被清除。您将需要使用 ViewState 之类的东西来持久化。见here
标签: c# asp.net asp.net-mvc model-view-controller