在 mvc 项目中创建模型 asp.net 多个实例



项目的一些背景:

我是 asp.net 新手,目前正在为一个学校项目苦苦挣扎,我需要为 GUI 制作一个原型,人们可以从中创建/更新/关闭产品状态,当产品出现问题时,该状态将通过邮件发送给人们。我的想法是垂直分割屏幕,左侧将写下邮件中应该包含的信息(产品状态),右侧显示当前产品状态的列表,您可以从中选择更新或关闭给定的。

问题:

我的问题是我找不到一种方法来制作模型的多个实例。我已经创建了一个测试模型、控制器和视图来了解如何做到这一点,现在将列出这些:

下面是我的模型,它将保存邮件的信息

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] 工作(我认为你可以以某种方式使用这些来做到这一点)。

希望有人能帮到我,提前谢谢!

如果我理解正确,当您第一次在文本框中输入值并单击提交时,该值将显示在页面右侧。当您将其他值放入框中并再次提交时,您希望右侧同时显示第一个和第二个值。这是对的吗?

假设这就是你想要的,那么要记住的是HTTP是无状态的,这意味着每次你发出新请求时,你都是从头开始的。因此,当您第二次提交表单时,页面不会记住第一个条目。ViewData不会在请求之间保留,您的statusList也不会,因为每次创建控制器(即每个请求)时都会创建新的控制器。

最好的办法是使用 Session 来保存以前提交的值。

public class HomeController : Controller
{
public ActionResult Index()
{
ProductStatus model = new ProductStatus();
List<ProductStatus> statusList = (List<ProductStatus>)Session["ProductStatuses"];
if (statusList != null)
ViewData["Status"] = statusList;
return View(model);
}
public ActionResult SendMessages(ProductStatus status) 
{
List<ProductStatus> statuses = (List<ProductStatus>)Session["ProductStatuses"];
if (statuses == null)
{
statuses = new List<ProductStatus>();
Session["ProductStatuses"] = statuses;
}
statusList.Add(status);
ViewData["Status"] = statusList;
return View("Index");
}
}

最新更新