在 asp.net mvc 提交一个表单,提交的参数正好与 Action方法中参数名称一样时会直接赋值上去, 那么怎么在赋值之前加操作呢? 比如对特定参数先进行编码操作
要在后台代码中进行操作,不用js!!
在form元素的onsubmit事件处理函数中进行操作。
<form name="testform" onsubmit="return do();">
function do(){
if(xxxx){
return false; //不提交表单
}else{
return true; //提交表单
} }
要在后台代码中进行操作,不用js!!
我举一个简单的例子。
视图代码
提交后的视图
运行效果
在form中定义个onsubumit事件,然后在事件中改变提交数据的值。
输入的名字是"张三123"在js中改成了"张三"
要在后台代码中进行操作,不用js!!
@koi:
public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } public ActionResult SaveStudent(Student student) { student.Name = student.Name + "123"; ViewBag.Student = student; return View("ResultSave"); } } public class Student { public string Name { get; set; } public string Sex { get; set; } public int Age{ get; set; } }
获取到对象直接改对象的属性就可以了的呀?
student.Name = student.Name + "123";
@凝冰: 这样写的话 别的地方用到student这个参数 都要加 student.Name = student.Name + "123";这个操作
@凝冰: 同意楼上
@koi: 第一种在读写属性中操作。
public class Student { private string _name; public string Name { get { return _name; } set { _name = value + "123"; } } public string Sex { get; set; } public int Age{ get; set; } }
第二种重写Controller 中的 OnActionExecuting
@koi:
public class ReController : Controller { protected override void OnActionExecuting(ActionExecutingContext context) { //获取controller string controllerStr = RouteData.Values["controller"].ToString().ToUpper(); //获取action string actionStr = RouteData.Values["action"].ToString().ToUpper(); //这个判断可以自己改。这里设置的是在Home controller下SaveStudent action中的Name参数进行更改 if (controllerStr.Equals("Home") && actionStr .Equals("SaveStudent")) { //比如修改name属性 Request.Params["Name"] = Request.Params["Name"] + 123; } } } public class HomeController : ReController { // // GET: /Home/ public ActionResult Index() { return View(); } public ActionResult SaveStudent(Student student) { student.Name = student.Name + "123"; ViewBag.Student = student; return View("ResultSave"); } } public class Student { private string _name; public string Name { get { return _name; } set { _name = value + "123"; } } public string Sex { get; set; } public int Age{ get; set; } }
@koi: 别的地方你串student对象,shudent对象的值已经改变。所以其他地方用到肯定是改变后的值。
@凝冰: 我的意思是说 别的action操作。你这样写不能所有的地方请求用到Student类型参数时都是改编后的值。
重载OnActionExecuting不太好用,因为对于参数的编码这样的操作 太多地方,太多参数都用到的了 ,不可能这样一个个判断的。
@凝冰: 而且
public class Student { private string _name; public string Name { get { return _name; } set { _name = value + "123"; } } public string Sex { get; set; } public int Age{ get; set; } }
这种写法 数据库取出来 赋值上去的时候也是会改变值 ,这样就重复改变了
public class Student public class StudentUpdate:Student public class StudentAdd:Student
有个东西叫继承!有个东西叫继承!有个东西叫继承!
还有个更高级的叫多态!还有个更高级的叫多态!还有个更高级的叫多态!
使用过滤器就好了。
过滤器或者AOP