问题描述
各位大侠,小弟刚学mvc4不久,请大家帮忙。问题如下:mvc4表单提交后控件器验证失败如何返回提交表单前的页面,提交表单页面有使用Ajax请求联动的下拉框,我想在提交表单后,如果控制器验证错误,还要反回页面继续修改表单。
解决方案
解决方案二:
参看引用3楼Asa_Jim的回复:
这很简单啊,举两个例子页面里面写functiondelComplement(id){ajaxpost('/AfterSales/Complement_Delete_Array',{hid_ID:id},function(){alert("删除成功");})};对应的AfterSales控制器里面写[HttpPost]publicJsonResultComplement_Delete_Array(){varid=Request.Get("hid_ID");long[]idArr;longlid=0;........
解决方案三:
引用1楼Asa_Jim的回复:
参看Quote: 引用3楼Asa_Jim的回复:
这很简单啊,举两个例子页面里面写functiondelComplement(id){ajaxpost('/AfterSales/Complement_Delete_Array',{hid_ID:id},function(){alert("删除成功");})};对应的AfterSales控制器里面写[HttpPost]publicJsonResultComplement_Delete_Array(){varid=Request.Get("hid_ID");long[]idArr;longlid=0;........
我要的是服务器处理。举个例子:publicActionResultCreate(){List<SelectListItem>list=newList<SelectListItem>();list.Add(newSelectListItem(){Text="Text1",Value="1"});list.Add(newSelectListItem(){Text="Text2",Value="2"});list.Add(newSelectListItem(){Text="Text3",Value="3"});ViewBag.selectList=newSelectList(list.AsEnumerable(),"Value","Text");returnView();}[HttpPost]publicActionResultCreate(Useruser){if(!ModelState.IsValid){//这个里该怎么返回,由于View还有一个SelectList要绑定,不可能又重新绑定一次吧}returnView(user);}
忽略客户端验证
解决方案四:
asp.netmvc没有自动化的状态(ViewState)维持机制,使用它本来就是要一遍遍地重新绑定的,你必须自己写一切东西。两个选择:1.使用ajax并且一切UI都通过前端处理。2.使用asp.netwebform并且一切UI数据绑定都通过服务器端处理。
解决方案五:
如果只有一个页面用redirecttoaction多个页面,用过滤器统一处理
解决方案六:
引用4楼devmiao的回复:
如果只有一个页面用redirecttoaction多个页面,用过滤器统一处理
lz其实是要保持页面上一堆已经被用户操作更新过的状态(例如下拉框的选项,或者和Grid的正在编辑的一整行内容更),而不是要跳到新的页面。
解决方案七:
asp.net之前都是为了模拟winform的用户体验,给“企业管理软件程序员”提供一个还算可行的编程工具的,因此它是事件驱动的、自动保持和自动填充ViewState机制的(例如你查询绑定了GridView之后,当页面回发时,GrudView内容会自动回填,而绝不是重新查询数据库)。可惜,asp.net在2006年左右过时了,没有跟上ajax潮流的节奏。于是微软模仿曾经被自己打败的struts来提供什么asp.netmvc。这其实就意味着整个asp.net平台基本上没有任何特别之处了(明眼人应该在几年前就看到asp.net的彻底的颓势),那么技术被淘汰之后,剩下的就是跟php、jsp等等拼宣传、拼社区、拼开源、拼忽悠能力了。
解决方案八:
引用5楼sp1234的回复:
Quote: 引用4楼devmiao的回复:
如果只有一个页面用redirecttoaction多个页面,用过滤器统一处理lz其实是要保持页面上一堆已经被用户操作更新过的状态(例如下拉框的选项,或者和Grid的正在编辑的一整行内容更),而不是要跳到新的页面。
那很简单UpdateModel(model);renturnView(model);