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"
我的预期结果是后者。能不能让模型中接收到的值直接是后者?
在前端传个你想要的格式应该就行了
我页面的向后传的已经是我想要的格式了
这与我预期的表单一致
我知道这里标准的应该是IEnumerable<string>来接收数据,但是我想知道的是,FormCollection可以直接把枚举型拼接为字符串,而模型为什么就不行?
我自己搞定了,谢谢
单个模型Save(Test test),多个模型 Save(Test[] test)或 Save(IEnumberable<Test> test)
我自己搞定了,谢谢
提交的时候变成 Value[0]=1,Value[1]=2
接收的时候使用list
在不用List的情况下能否实现?
@写代码的相声演员: 为啥不用List。。你是不是需求上有问题
@ta_wuhen:
不是...
单纯是满足需求这个很好解决,无非就是从Formcollection中从新赋值,或者,如你所说加一个IEnumberable的属性或参数来接收,去间接给字符按赋值。这个问题通过硬编码很好解决。
但是如果说同样的问题有100个模型,前台通过表单传回多个值,然后后台拼接成字符串,那么我所有的Action和Model都要通过硬编码解决问题,就感觉有点不太优雅了。
我现在单纯的就是想找一种能偷懒优雅点的办法,例如从哪里配置一下...之类的。
@写代码的相声演员: 不需要啊,一百个也直接使用List接收啊,在Html那边直接遍历Value[i],就可以了啊
@ta_wuhen: 不是100个值,是100个模型
我demo1控制器里用的Test1模型,有个字符串字段需要做这种处理,
在demo2控制器里有个Test2模型,也有这种字符串字段
以此类推,demo100控制器的Test100模型,还是有一个需要拼接的字符串。
那么所有的我这100个控制器的action上都要加上IEnumberable<string>然后把这个参数转化成字符串,赋给模型里的对应字段。这个方法我懂。
但是照这样,我就有100个地方要处理,并且字段不一样,甚至有的模型里有多个需要这样处理的字段,那么我就需要写至少100段转化的代码。
所以说希望找一种更优雅更通用的办法
@ta_wuhen: 我自己搞定了,还是谢谢你