MVC html.checkbox将两个值发布到控制器
我正在使用MVC html.checkbox将两个值发布到控制器,html,asp.net-mvc,checkbox,Html,Asp.net Mvc,Checkbox,我正在使用html.checkbox在我的mvc应用程序中,它将生成类似 <input checked="checked" id="cb17" name="reports" type="checkbox" value="sdf" /> <input name="reports" type="hidden" value="false" /> <input checked="checked" id="cb18" name="reports" type="ch
html.checkbox
在我的mvc应用程序中,它将生成类似
<input checked="checked" id="cb17" name="reports" type="checkbox" value="sdf" />
<input name="reports" type="hidden" value="false" />
<input checked="checked" id="cb18" name="reports" type="checkbox" value="ty" />
<input name="reports" type="hidden" value="false" />
型号:
public IEnumerable<string> reports{ get; set; }
public IEnumerable报表{get;set;}
我知道html.checkbox将在内部创建隐藏字段,但当我发布表单时,它需要发送checkbox的任一值。为什么它也发送隐藏字段。如何避免这种情况
参考下面的链接
但是无法获得正确的理解。首先,您需要一个用于报告的viewModel
public class Report
{
public string ReportName { get; set; }
public bool IsSelected { get; set; }
}
然后,假设您正在使用“家庭”控制器进行此操作。转到项目中视图
下的主页
文件夹
创建一个名为DisplayTemplates
的新文件夹。此名称和文件夹位置非常重要。因此,请使用确切的名称
然后在DisplayTemplates
内创建一个新视图。视图的名称必须是Report.cshtml
在Report.cshtml
视图中,使用以下代码
model MvcApplication1.Models.Report
@Html.CheckBoxFor(m=>m.IsSelected)
@Html.Label(Model.ReportName, Model.ReportName)
然后回到主页
查看文件夹并选择Index.cshtml
。将下面的代码添加到索引页
@model List<MvcApplication1.Models.Report>
@using (Html.BeginForm("ShowReports", "Home", Model, FormMethod.Post))
{
@Html.DisplayFor(m => m)
<button type="submit">Show Selected Reports</button>
}
在ShowReport中添加一个断点,并查看模型变量的结果。如果有(x=>x)选项,可以使用CheckBoxFor帮助器。我正在创建一个自生成的表单,我不需要硬编码的模型来构建表单 为了解决这个问题,我查看了结果,如果复选框被选中,它将返回两个值(真/假),如您所述。如果未选中该复选框,它将只提交false,即隐藏值 人们建议使用javascript还有其他方法,但如果禁用javascript呢?所以我决定在接收表单集合的控制器中使用它
public ActionResult methodName (FormCollection collecitonName)
{
foreach (var key in collecitonName.AllKeys)
{
var isCheckboxTrue = Request.Form[key].Contains("true")
}
}
CheckBox()
方法用于绑定到booean
属性,而不是字符串
(它正确生成
和
,提交表单时将正确绑定到boolean
属性。不要使用CheckBox()
用于绑定到字符串
。您尚未显示您的模型,或您试图绑定到的对象,或您发回的方法,因此无法理解您为何尝试使用此黑客。@stephen更新了模型您的模型是IEnumerable
(不是bool
)所以,只需使用
id手动生成html,您希望接收已检查的值数组。但理想情况下,您应该创建一个视图模型并绑定到它。该模型将包含(比如)string Name
和bool被选中
并使用for
循环生成控件-请参阅example@SivaRajini你能告诉我们你想做什么吗?据我所知,你有一个报告列表,你想让用户选择一些报告并发回你的控制器。这样你就可以是否为所选报告名称生成报告?
public ActionResult Index()
{
List<Report> reports = new List<Report>()
{
new Report(){ReportName = "Report 1", IsSelected = false},
new Report(){ReportName = "Report 2", IsSelected = false},
new Report(){ReportName = "Report 3", IsSelected = false},
new Report(){ReportName = "Report 4", IsSelected = false},
new Report(){ReportName = "Report 5", IsSelected = false},
};
return View(reports);
}
public ActionResult ShowReports(IEnumerable<Report> model)
{
Debug.Write(model.Count());
return View(); //create a blank view called ShowReport.
}
public ActionResult methodName (FormCollection collecitonName)
{
foreach (var key in collecitonName.AllKeys)
{
var isCheckboxTrue = Request.Form[key].Contains("true")
}
}