请问一个ASP.Net MVC的基础概念有关问题
请教一个ASP.Net MVC的基础概念问题
第一个问题:
View类的代码如下:
Controller类的代码如下:
页面运行后,在name文本框和text文本框输入值后点击“提交”按钮,数据提交到服务器返回后,
页面上两个文本框中仍然保存着刚才输入的值。
但是如果我把Controller类的方法稍作修改,如下:
这时候,页面运行后,在name文本框和text文本框输入值后点击“提交”按钮,数据提交到服务器返回后,
页面上两个文本框会丢失刚才输入的值。
这是为什么 ?
第二个问题:
View类的代码稍作修改如下:
Controller类的代码代码不变如下:
这时候,页面运行后,在name文本框和text文本框输入值后点击“提交”按钮,数据提交到服务器返回后,
页面上两个文本框同样也会丢失刚才输入的值。
这又是怎么回事??
------解决思路----------------------
楼主的钻研精神挺令人佩服,我从没有注意过这个问题,看了这个帖子,特意搜了一下,发现这篇博客说到这个问题:
http://weblog.west-wind.com/posts/2012/Apr/20/ASPNET-MVC-Postbacks-and-HtmlHelper-Controls-ignoring-Model-Changes
答案是HtmlHelper的TextBox方法会从ModelState中获取相应的值,而ModelState是用于对Model进行验证的,用FormCollection做参数的话,ModelState就是空的,也就是asp.net mvc无法验证Model,所以也就无法在回发后还原用户输入的内容。至于用input Html标签,那和asp.net mvc的ModelState就不相干了,也就不可能从ModelState中还原回发前的内容。
你也可以发扬一下你的刨根问底精神,直接研究源代码:
http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/Html/InputExtensions.cs
------解决思路----------------------
public ActionResult HelloModelTest( FormCollection fc)
{
var model = new 你的模型类();
UpdateModel(model);
return View(model);
}
第一个问题:
View类的代码如下:
@using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post))
{
@Html.TextBox("Name");
@Html.TextBox("Text");
<input type="submit" value="提交" />
}
Controller类的代码如下:
public ActionResult HelloModelTest()
{
HelloModel model = new HelloModel();
return View();
}
[HttpPost]
public ActionResult HelloModelTest( string name, string text)
{
ActionResult result = View();
return result;
}
页面运行后,在name文本框和text文本框输入值后点击“提交”按钮,数据提交到服务器返回后,
页面上两个文本框中仍然保存着刚才输入的值。
但是如果我把Controller类的方法稍作修改,如下:
public ActionResult HelloModelTest()
{
HelloModel model = new HelloModel();
return View();
}
[HttpPost]
public ActionResult HelloModelTest( FormCollection fc)//参数类型做了修改
{
ActionResult result = View();
return result;
}
这时候,页面运行后,在name文本框和text文本框输入值后点击“提交”按钮,数据提交到服务器返回后,
页面上两个文本框会丢失刚才输入的值。
这是为什么 ?
第二个问题:
View类的代码稍作修改如下:
@using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post))
{
<input type="text" name="Name" />
<input type="text" name="text" />
<input type="submit" value="提交" />
}
Controller类的代码代码不变如下:
public ActionResult HelloModelTest()
{
HelloModel model = new HelloModel();
return View();
}
[HttpPost]
public ActionResult HelloModelTest( string name, string text)
{
ActionResult result = View();
return result;
}
这时候,页面运行后,在name文本框和text文本框输入值后点击“提交”按钮,数据提交到服务器返回后,
页面上两个文本框同样也会丢失刚才输入的值。
这又是怎么回事??
------解决思路----------------------
楼主的钻研精神挺令人佩服,我从没有注意过这个问题,看了这个帖子,特意搜了一下,发现这篇博客说到这个问题:
http://weblog.west-wind.com/posts/2012/Apr/20/ASPNET-MVC-Postbacks-and-HtmlHelper-Controls-ignoring-Model-Changes
答案是HtmlHelper的TextBox方法会从ModelState中获取相应的值,而ModelState是用于对Model进行验证的,用FormCollection做参数的话,ModelState就是空的,也就是asp.net mvc无法验证Model,所以也就无法在回发后还原用户输入的内容。至于用input Html标签,那和asp.net mvc的ModelState就不相干了,也就不可能从ModelState中还原回发前的内容。
你也可以发扬一下你的刨根问底精神,直接研究源代码:
http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/Html/InputExtensions.cs
------解决思路----------------------
public ActionResult HelloModelTest( FormCollection fc)
{
var model = new 你的模型类();
UpdateModel(model);
return View(model);
}