首页 新闻 会员 周边 捐助

.Net MVC 模型接收参数问题

0
悬赏园豆:10 [已解决问题] 解决于 2018-07-09 20:49

Html:

<form action="/Test/save" method="post">
    <!--省略其他字段-->
    <input type="text" name="value" />
    <input type="text" name="value" />
    <input type="text" name="value" />
    <!--有可能有更多的name为value的input-->
    <input type="submit" value="submit" />
</form>

 

接收模型:

    public class Test
    {
        //省略其他字段
        public string value { get; set; }
    }    

 

控制器:

    public class TestController : Controller
    {
        public ActionResult Save(Test test)
        {
            var collection = new FormCollection(Request.Form);

            return View();
        }
    }

 

假设我的页面上有3个input,值分别是1,2,3。

在控制器的Save方法中

 Test.value 的值是"1",但是在 collection["value"] 的值就是"1,2,3"

 

我的预期结果是后者。能不能让模型中接收到的值直接是后者?

写代码的相声演员的主页 写代码的相声演员 | 小虾三级 | 园豆:517
提问于:2018-06-21 16:00
< >
分享
最佳答案
0

筒子们,我自己搞定了,正确的姿势叫做模型绑定器 ModelBinder 。完整方案见博客

[MVC]自定义模型绑定器,从表单对模型进行赋值

写代码的相声演员 | 小虾三级 |园豆:517 | 2018-07-09 20:47
其他回答(3)
0

在前端传个你想要的格式应该就行了

收获园豆:1
华临天下 | 园豆:1501 (小虾三级) | 2018-06-21 16:45

我页面的向后传的已经是我想要的格式了

这与我预期的表单一致

我知道这里标准的应该是IEnumerable<string>来接收数据,但是我想知道的是,FormCollection可以直接把枚举型拼接为字符串,而模型为什么就不行?

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-06-21 16:55

我自己搞定了,谢谢

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-07-09 20:49
0

单个模型Save(Test test),多个模型 Save(Test[] test)或 Save(IEnumberable<Test> test)

收获园豆:1
happydaily | 园豆:260 (菜鸟二级) | 2018-06-21 22:11

我自己搞定了,谢谢

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-07-09 20:50
0

提交的时候变成 Value[0]=1,Value[1]=2

接收的时候使用list

收获园豆:8
ta_wuhen | 园豆:271 (菜鸟二级) | 2018-06-26 18:01

在不用List的情况下能否实现?

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-06-26 18:56

@写代码的相声演员: 为啥不用List。。你是不是需求上有问题

支持(0) 反对(0) ta_wuhen | 园豆:271 (菜鸟二级) | 2018-06-27 10:10

@ta_wuhen:

不是...

单纯是满足需求这个很好解决,无非就是从Formcollection中从新赋值,或者,如你所说加一个IEnumberable的属性或参数来接收,去间接给字符按赋值。这个问题通过硬编码很好解决。

但是如果说同样的问题有100个模型,前台通过表单传回多个值,然后后台拼接成字符串,那么我所有的Action和Model都要通过硬编码解决问题,就感觉有点不太优雅了。

我现在单纯的就是想找一种能偷懒优雅点的办法,例如从哪里配置一下...之类的。

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-06-27 10:18

@写代码的相声演员: 不需要啊,一百个也直接使用List接收啊,在Html那边直接遍历Value[i],就可以了啊

支持(0) 反对(0) ta_wuhen | 园豆:271 (菜鸟二级) | 2018-06-27 11:47

@ta_wuhen: 不是100个值,是100个模型

我demo1控制器里用的Test1模型,有个字符串字段需要做这种处理,

在demo2控制器里有个Test2模型,也有这种字符串字段

以此类推,demo100控制器的Test100模型,还是有一个需要拼接的字符串。

那么所有的我这100个控制器的action上都要加上IEnumberable<string>然后把这个参数转化成字符串,赋给模型里的对应字段。这个方法我懂。

但是照这样,我就有100个地方要处理,并且字段不一样,甚至有的模型里有多个需要这样处理的字段,那么我就需要写至少100段转化的代码。

所以说希望找一种更优雅更通用的办法

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-06-27 12:28

@ta_wuhen: 我自己搞定了,还是谢谢你

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-07-09 20:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册