Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVC&;ASP.Net Web表单:Viewstate?_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4_Webforms - Fatal编程技术网

MVC&;ASP.Net Web表单:Viewstate?

MVC&;ASP.Net Web表单:Viewstate?,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,webforms,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Webforms,我使用过ASP.NETWebForms。我目前正在学习MVC,我读到ASP.NET MVC生成的页面不包含任何视图状态数据。 有人能解释一下MVC中viewstate的替代品是什么吗? 他们怎么会淘汰这个州?由于控件也有viewstate,在这种情况下还有什么选择?在webforms中,第一页加载通过使用IsPostback属性来区分,服务器控件基本上是在页面加载事件中用数据或初始值初始化的。这些初始设置将保留在页面的后续回发事件中。您可能已经知道,所有这一切都是由viewstate完成的,它基

我使用过ASP.NETWebForms。我目前正在学习MVC,我读到ASP.NET MVC生成的页面不包含任何视图状态数据。 有人能解释一下MVC中viewstate的替代品是什么吗?
他们怎么会淘汰这个州?由于控件也有viewstate,在这种情况下还有什么选择?

在webforms中,第一页加载通过使用IsPostback属性来区分,服务器控件基本上是在页面加载事件中用数据或初始值初始化的。这些初始设置将保留在页面的后续回发事件中。您可能已经知道,所有这一切都是由viewstate完成的,它基本上是一个隐藏变量,包含页面上所有服务器控件的状态,并为每个回发事件回发

MVC没有这种机制,是完全无状态的,也就是说,我们需要为每个请求手动分配控件的值。例如:

在Web表单中

ASPX页面:

<asp:TextBox id="txtName" runat="server"/>
<asp:Button id="btnSubmit" Text="submit" onclick = "btnSubmit_click" />
输入一个值并单击submit按钮,该值在回发后由于viewstate而被持久化

在MVC中

看法

输入一个值并单击submit按钮,该值不会在回发过程中持久化,因为没有这种持久化机制。因此,我们需要手动实现它

查看

@using(Html.BeginForm()){
<input id="Name" type="text" name="Name" value="@ViewBag.Name"/>
<input type="submit" value="submit" />
}
注意:我使用ViewBag只是为了展示一个示例,理想情况下,我们需要从控制器传递viewmodel

附加输入

除了持久化状态的作用外,ViewState还可用于存储值,例如:ViewState[“test”]=objectoranyothervalue。在MVC中,还有其他用于状态管理的技术,如ViewBag、ViewData和TempData,但不同的是它们不会像ViewState一样发布回服务器。它们仅用于将数据从控制器传递到视图

@using(Html.BeginForm()){
<input id="Name" type="text" name="Name"/>
<input type="submit" value="submit" />
}
[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" />
}
[HttpPost]
public ActionResult Index(FormCollection values)
{
    ViewBag.Name = values["name"];
    return View();
}