gpt4 book ai didi

c# - 模型 MVC 5 的 session 数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:46 28 4
gpt4 key购买 nike

我想使用 C# session 作为存储数据(可能编辑)的方式,而不是反复返回数据库,尤其是在重新填充列表时,而且这可能会跨越几页。

在 ASP Web 窗体中,我会执行以下操作。

代码隐藏:

if(!String.IsNullOrEmpty(Session["PersonSession"] as String)
{
Person newPerson = new Person();
}
else
{
Person newPerson = (Person)Session["PersonSession"];
myTextBox.Text = newPerson.Name.ToString();
}
// submitting the data chucking the data the other way
// then stored proc
newPerson.Name = myTextBox.Text;

使用上面的方法,我能够填充现有的文本框,并在单击提交按钮后将数据提交回 session 。

如何在 Razor MVC 5 中实现这一点?

更新我一直在尝试使用下面答案中建议的方法并随时更新。尝试将所有内容存储在 session 中,并在将所有内容转储到数据库之前让它通过 ViewBag 显示。

Controller :

public ActionResult Index()
{
if (!string.IsNullOrEmpty((string)Session["SessionObj"]))
{
List<Person> People = new List<Person>();
}
else
{
List<Person> People = (List<Person>)Session["SessionObj"];

//foreach(var p in People)
//{
// p.Name.ToString();
//}
ViewBag.PersonList = People;
}
return View();
}

public ActionResult AddPerson([Bind(Include ="Name")]Person person)
{
// add session/viewbag to list of session/viewbag
List<Person> People = (List<Person>)Session["SessionObj"];
People.Add(person);
Session["SessionObj"] = People;

return View();
}

索引

@model SessionData.Models.Person
@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

@if (ViewBag.PersonList != null)
{
foreach (var person in @ViewBag.PersonList)
{
<div>@person.Name</div>
}
}

@using (Html.BeginForm())
{
<div class="form-horizontal">
<h4>Employee</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="AddPerson" class="btn btn-default" />
</div>
</div>
</div>
}

最佳答案

您通常不想在 Model View Controller 中使用 session ,因为它们很快就会变成孤立的,这会影响性能,但它也会决定一个持久状态。这违反了 Model View Controller 的无状态性质,因此您要确保它是理想的。

一些替代方案是:

  • 隐藏
  • 临时数据

这可能会让您免除多数据库请求。但是,如果您想创建模型数据的 session :

public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}

为简洁起见,一个简单的模型。当您调用您的数据层时,它会将所述模型填充为object Person。或 Person 的集合例如 List<Person>例如。

说完数据后,您只需执行以下操作:

var person = GetPeople();
Session.Add("Person", person);

我们将使用 GetPeople()作为 List<Person>返回。一旦你应用了 Session.Add(...)您不再需要为该模型调用数据库。你只需要做:

var model = (List<Person>)Session["Person"];

您现在有了模型,所以您只需执行以下操作:

return View(model, ...);

在这种情况下,现在你们所有人都是 IEnumerable通过Model .您可以使用 Razor 对其进行迭代。另一种方法是通过 Razor 进行硬调用。

@{
var model = (List<Person>)Session["Person"];
if(model.Any())
foreach(var person in model)
{
<div>@person.Name</div>
}
}

您可以通过多种方式做到这一点,希望这些方法对您有所帮助。

关于c# - 模型 MVC 5 的 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057937/

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