首页新闻找找看学习计划

asp.net mvc action方法中参数在获取到值前,怎么加上自定义的操作??

0
悬赏园豆:10 [已解决问题] 解决于 2015-12-06 21:53

在 asp.net mvc 提交一个表单,提交的参数正好与 Action方法中参数名称一样时会直接赋值上去, 那么怎么在赋值之前加操作呢?  比如对特定参数先进行编码操作 

要在后台代码中进行操作,不用js!!

koi的主页 koi | 初学一级 | 园豆:3
提问于:2015-12-02 00:43
< >
分享
最佳答案
0

自定义模型绑定器,或者扩展DefaultModelBinder类,重写其CreateModel()方法。

收获园豆:10
Sentry1992 | 菜鸟二级 |园豆:217 | 2015-12-03 15:49

自定义模型绑定器不太好   如果每个模型都需要处理    需要每个模型都写个绑定器  这样太麻烦

koi | 园豆:3 (初学一级) | 2015-12-06 17:50

怎么重载DefaultModelBinder类,重写其CreateModel()方法。???

koi | 园豆:3 (初学一级) | 2015-12-06 21:33

@koi: 呵呵,这个我也没用到过,在书上看到的,具体用法还是去看看msdn吧~~

Sentry1992 | 园豆:217 (菜鸟二级) | 2015-12-06 21:42
其他回答(5)
0

在form元素的onsubmit事件处理函数中进行操作。

<form name="testform" onsubmit="return do();">

 

function do(){     

    if(xxxx){         

        return false;      //不提交表单

     }else{

        return true;   //提交表单

 } }

何德海 | 园豆:435 (菜鸟二级) | 2015-12-02 09:29

要在后台代码中进行操作,不用js!!

支持(0) 反对(0) koi | 园豆:3 (初学一级) | 2015-12-02 09:34
0

我举一个简单的例子。

视图代码

提交后的视图

运行效果

在form中定义个onsubumit事件,然后在事件中改变提交数据的值。

输入的名字是"张三123"在js中改成了"张三"

凝冰 | 园豆:685 (小虾三级) | 2015-12-02 09:29

要在后台代码中进行操作,不用js!!

支持(0) 反对(0) koi | 园豆:3 (初学一级) | 2015-12-02 09:34

@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";

支持(1) 反对(0) 凝冰 | 园豆:685 (小虾三级) | 2015-12-02 09:36

@凝冰: 这样写的话 别的地方用到student这个参数 都要加 student.Name = student.Name + "123";这个操作

支持(0) 反对(0) koi | 园豆:3 (初学一级) | 2015-12-02 09:37

@凝冰: 同意楼上

支持(0) 反对(0) 何德海 | 园豆:435 (菜鸟二级) | 2015-12-02 09:43

@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

支持(0) 反对(0) 凝冰 | 园豆:685 (小虾三级) | 2015-12-02 09:44

@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; }
    }
支持(0) 反对(0) 凝冰 | 园豆:685 (小虾三级) | 2015-12-02 09:50

@koi: 别的地方你串student对象,shudent对象的值已经改变。所以其他地方用到肯定是改变后的值。

支持(0) 反对(0) 凝冰 | 园豆:685 (小虾三级) | 2015-12-02 09:52

@凝冰: 我的意思是说  别的action操作。你这样写不能所有的地方请求用到Student类型参数时都是改编后的值。

重载OnActionExecuting不太好用,因为对于参数的编码这样的操作 太多地方,太多参数都用到的了  ,不可能这样一个个判断的。

支持(0) 反对(0) koi | 园豆:3 (初学一级) | 2015-12-02 09:56

@凝冰: 而且

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; }
    }

这种写法 数据库取出来 赋值上去的时候也是会改变值 ,这样就重复改变了

支持(0) 反对(0) koi | 园豆:3 (初学一级) | 2015-12-02 09:57
0

public class Student public class StudentUpdate:Student public class StudentAdd:Student
 有个东西叫继承!有个东西叫继承!有个东西叫继承!
还有个更高级的叫多态!还有个更高级的叫多态!还有个更高级的叫多态!

丫的 | 园豆:1575 (小虾三级) | 2015-12-02 11:01
0

使用过滤器就好了。

Mountains | 园豆:241 (菜鸟二级) | 2015-12-04 18:02
0

过滤器或者AOP

黄昏MMM | 园豆:317 (菜鸟二级) | 2017-01-11 15:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册