Asp.net mvc 3 使用强类型viewmodels时,是否可以回发不在viewmodel中的复选框值?
我对.net相当陌生。 我使用强类型viewmodels。我有一个一般性的问题:是否可以在不将复选框(或按钮)添加到viewmodel的情况下将其添加到视图中,并访问控制器操作中的值(选中或未选中)?如果是,请解释如何进行。方法必须是post吗?Asp.net mvc 3 使用强类型viewmodels时,是否可以回发不在viewmodel中的复选框值?,asp.net-mvc-3,viewmodel,Asp.net Mvc 3,Viewmodel,我对.net相当陌生。 我使用强类型viewmodels。我有一个一般性的问题:是否可以在不将复选框(或按钮)添加到viewmodel的情况下将其添加到视图中,并访问控制器操作中的值(选中或未选中)?如果是,请解释如何进行。方法必须是post吗? 谢谢我真的不明白您在视图中添加复选框而不将其添加到viewmodel是什么意思,但让我试着用一些示例来说明: 假设您具有以下形式: <a href="#" id="add">Add checkbox</a> @using (H
谢谢我真的不明白您在视图中添加复选框而不将其添加到viewmodel是什么意思,但让我试着用一些示例来说明: 假设您具有以下形式:
<a href="#" id="add">Add checkbox</a>
@using (Html.BeginForm())
{
<div id="placeholder"></div>
<input type="submit" value="OK" />
}
<script type="text/javascript">
var index = 0;
$('#add').click(function () {
$('#placeholder').append(
$('<input/>', {
type: 'checkbox',
name: 'foo[' + index + ']',
value: 'true'
})
).append(
$('<input/>', {
type: 'hidden',
name: 'foo[' + index + ']',
value: 'false'
})
);
index++;
return false;
});
</script>
@使用(Html.BeginForm())
{
}
var指数=0;
$('#添加')。单击(函数(){
$('#占位符')。追加(
$('', {
键入:“复选框”,
名称:“foo['+index+']”,
值:“true”
})
).附加(
$('', {
键入:“隐藏”,
名称:“foo['+index+']”,
值:“false”
})
);
索引++;
返回false;
});
以及一名控制器,该控制器将接收该表格:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(IEnumerable<bool> foo)
{
// When you submit the form this action will be invoked
// and you will get an list of boolean values corresponding
// to each checkbox state
return View();
}
}
公共类HomeController:控制器
{
公共行动结果索引()
{
返回视图();
}
[HttpPost]
公共行动结果索引(IEnumerable foo)
{
//提交表单时,将调用此操作
//您将得到相应的布尔值列表
//添加到每个复选框状态
返回视图();
}
}
您始终可以通过以下方式获取表单数据:
Request.Form["FieldName"]
或者将它们作为参数添加到回发操作方法:
[HttpPost]
public ActionResult Edit(MyModel modelData, string extraField) {
但是,为什么不将它们添加到您的模型中呢?如果希望使用它们来纠正验证错误,这将使它变得更容易。当然,只需将参数添加到操作方法中,或者在最坏的情况下,直接转到FormCollection(或MVC 3中调用的任何内容)。