Asp.net mvc 3 使用强类型viewmodels时,是否可以回发不在viewmodel中的复选框值?

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

我对.net相当陌生。 我使用强类型viewmodels。我有一个一般性的问题:是否可以在不将复选框(或按钮)添加到viewmodel的情况下将其添加到视图中,并访问控制器操作中的值(选中或未选中)?如果是,请解释如何进行。方法必须是post吗?
谢谢

我真的不明白您在视图中添加复选框而不将其添加到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中调用的任何内容)。