ASP.net MVC发布int数组
本文关键字:int 数组 发布 MVC net ASP | 更新日期: 2023-09-27 18:21:25
想象一下这个公式。(我编辑了表格,以显示我正在努力做什么。)
@using (Html.BeginForm("Add", "Notify", FormMethod.Post ))
{
@foreach (KeyValuePair<Server, Services[]> server in ViewBag.ServerServices)
{
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="heading_@server.Key.ServerID">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#@server.Key.ServerID" aria-expanded="false" aria-controls="@server.Key.ServerID">
@server.Key.Servername
</a>
</h4>
</div>
<div id="@server.Key.ServerID" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading_@server.Key.ServerID">
@foreach (Services service in server.Value)
{
<input class="form-control" type="checkbox" name="selectedServerServices[@server.Key.ServerID]" value="@service.ServiceID"/><label>@service.ServiceName</label>
<br/>
}
</div>
</div>
}
我也想得到发布的值和密钥,但在尝试检索两者时,我总是得到一个null对象。
在Request.AllKeys中,我可以看到有两个值(例如)但是公布的值没有进入定义的字典
我的Action方法如下所示。
public ActionResult Add(Dictionary<string, int> test )
我试图解决你的问题并找到一种方法。你只需要给你的复选框命名,如下所示:
<input class="form-control" type="checkbox" name="test.selectedServerServices[@server.Key.ServerID]" value="@service.ServiceID"/><label>@service.ServiceName</label>
您只能添加参数名称.yourCustomName
这是我的示例代码:
<div>
@using(Html.BeginForm()){
<input type="checkbox" name="checks.First" value="1" />
<input type="checkbox" name="checks.Second" value="2" />
<input type="checkbox" name="checks.Third" value="3" />
<input type="checkbox" name="checks.Fourth" value="4" />
<input type="submit" value="Submit"/>
}
</div>
这是我的行动:
[HttpPost]
public ActionResult Index(Dictionary<string, int> checks)
{
return View();
}
这就像你想要的一样。但请注意,如果你在不选中任何复选框的情况下提交表格,你将在字典中有两个参数:控制器和动作
或者您可以使用自定义模型活页夹,如下所示:
using System.Web.Mvc;
namespace YourNameSpace
{
public class MyCustomModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
HttpRequestBase request = controllerContext.RequestContext.HttpContext.Request;
Dictionary<string, int> test = new Dictionary<string, int>();
test.Add("test[10]", int.Parse(request.Form["test[10]"]));
test.Add("test[11]", int.Parse(request.Form["test[11]"]));
return test;
}
}
}
然后在Global.asax 中注册
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.Add(typeof(Dictionary<string,int>), new MyCustomModelBinder());
}
最后在你的方法中使用它,如下所示:
public ActionResult Add([ModelBinder(typeof(MyCustomModelBinder))]Dictionary<string, int> test )