gpt4 book ai didi

c# - 将数据从 html 表单保存到列表

转载 作者:行者123 更新时间:2023-11-30 20:33:04 25 4
gpt4 key购买 nike

我有两个 Create 方法,一个用 HttpGet 修饰,另一个用 HttpPost 修饰。我为第一个看起来像这样的创建 View :

@{
ViewBag.Title = "Create";
}

<h2>Create</h2>

<form action="/" method="post">
<input type="text" name="txt" value="" />
<input type="submit" />
</form>

方法:

List<string> myList = new List<string> { "element1", "element2", "element3" };
public ActionResult Create()
{
return View();
}

[HttpPost]
public ActionResult Create(string txt)
{
//myList.Add(Request.Form["txt"]);
myList.Add(txt);
return View();
}

我只是想将数据从按钮上的表单传递到我的第二个 Create() 并将其保存到 myList

我需要一些关于如何完成这项工作的建议。

最佳答案

一旦你修复了你的表单(因为你正在回发到你的应用程序的默认路由(默认 HomeController.Index() 方法)通过发送请求到/,而不是你的Create 方法),您实际上是在正确地将值添加到您的列表中。问题是,该值仅保留用于当前请求。

要使事物持久化,您需要考虑在内存、数据库或 session 中的持久层。我在下面提供了一个使用 session 的完整示例,它将为您提供每个用户的列表实例。如果没有这一层,一旦操作完成处理,您的 Controller 就会被例行处置,因此不会保留对列表的修改。这是 ASP.NET 中的正常请求生命周期,当您认为您的应用基本上一次只处理 1 个请求时,这是有意义的。重要的是要注意,使某些东西 static 本身并不是一种持久性形式,因为它的生命周期和可靠性是不确定的。它似乎可以工作,但一旦您的应用程序池回收(即应用程序被销毁并重新加载到内存中),您将再次失去对列表的所有修改。

我建议您继续阅读 Session State以准确了解下面发生的事情。简而言之,您站点的每个应用程序用户/唯一访问者都将获得一个唯一的“ session ID”,然后您可以使用此 session ID 来存储您希望在服务器端使用的数据。这就是为什么如果您要从不同的浏览器访问您的 Create 方法(或尝试私有(private)模式),您将维护两个单独的数据列表。

View (也向用户输出列表):

@model List<string>
@{
ViewBag.Title = "Create";
}

<h2>Create</h2>

<ul>
@foreach(var str in Model)
{
<li>@str</li>
}
</ul>

@using (Html.BeginForm())
{
<input type="text" name="txt" />
<input type="submit" />
}

Controller 内容:

public List<string> MyList
{
get
{
return (List<string>)(
// Return list if it already exists in the session
Session[nameof(MyList)] ??
// Or create it with the default values
(Session[nameof(MyList)] = new List<string> { "element1", "element2", "element3" }));
}
set
{
Session[nameof(MyList)] = value;
}
}

public ActionResult Create()
{
return View(MyList);
}

[HttpPost]
public ActionResult Create(string txt)
{
MyList.Add(txt);
return View(MyList);
}

关于c# - 将数据从 html 表单保存到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com