- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用过 ASP.Net Webforms。我目前正在学习 MVC,并且我了解到 ASP.NET MVC 生成的页面不包含任何 View 状态数据。有人能解释一下 MVC 中 viewstate 的替代品是什么吗?他们是如何消除 View 状态的?由于控件也有 View 状态,在这种情况下有什么替代方案?
最佳答案
在 webforms 中,第一个页面加载是通过使用 IsPostback 属性来区分的,服务器控件基本上是在 Page_Load 事件中用数据或初始值初始化的。这些初始设置会保留在页面的后续回发事件中。正如您可能已经知道的那样,所有这一切都是由 viewstate 完成的,viewstate 基本上是一个隐藏变量,它包含页面上所有服务器控件的状态,并在每个回发事件中被回发。
MVC 没有这种机制并且是完全无状态的,即我们需要为每个请求手动分配控件的值。例如:
在网络表单中
ASPX 页面:
<asp:TextBox id="txtName" runat="server"/>
<asp:Button id="btnSubmit" Text="submit" onclick = "btnSubmit_click" />
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostback)
{
txtName.Text = "test1";
}
}
protected void btnSubmit_click(object sender, EventArgs e)
{
//some code
}
输入一个值并单击提交按钮,由于 View 状态,该值在回发后获得持久化事件。
在 MVC 中
查看
@using(Html.BeginForm()){
<input id="Name" type="text" name="Name"/>
<input type="submit" value="submit" />
}
Controller
[HttpPost]
public ActionResult Index(FormCollection values)
{
return View();
}
输入一个值并点击提交按钮,该值不会在回传中持久化,因为没有这样的持久化机制。所以我们需要手动实现
查看
@using(Html.BeginForm()){
<input id="Name" type="text" name="Name" value="@ViewBag.Name"/>
<input type="submit" value="submit" />
}
Controller
[HttpPost]
public ActionResult Index(FormCollection values)
{
ViewBag.Name = values["name"];
return View();
}
注意:我使用 ViewBag 只是为了展示一个例子,理想情况下我们需要从 Controller 传递 viewmodel。
额外的输入
除了持久化状态之外,ViewState 还可以用于存储值,例如:ViewState["test"] = objectoranyothervalue。在 MVC 中,还有其他用于状态管理的技术,如 ViewBag、ViewData 和 TempData,但不同之处在于它们不会像 ViewState 那样回发到服务器。它们仅用于将数据从 Controller 传递到 View 。
关于asp.net - MVC 和 ASP.Net Web 窗体 : Viewstate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14169230/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!