动态添加行到MVC视图然后传递给控制器

时间:2012-06-19 13:21:49

标签: c# ajax asp.net-mvc-3 controller partial-views

好的,所以我尝试了很多东西,其中没有一件我非常熟悉,我似乎无法弄清楚如何完成我需要做的事情。这似乎是一项简单的任务,我确信有人已经完成了它!

本质上,我需要创建一个表单,该表单能够创建更多将绑定到模型的字段,甚至只需在提交时传递给控制器​​。

首先,我有一个非常简单的模型。类似的东西:

public class Account
{
    public string Organization { get; set; }
    public List<UserModel> Users { get; set; }
}
public class UserModel
{
    public string UserFirstName { get; set; }
    public string UserLastName { get; set; }
    public string UserEmailAddress { get; set; }
    public bool UserIsAdmin { get; set; }
}

我的观点是一个简单的注册表单,它可以获取创建帐户所需的所有输入。它需要包含这些字段,但也可以在第一个名称,姓氏,电子邮件和isAdmin标志的另一行中添加“添加用户”和ajax的链接。

这是我被卡住的地方。我想我需要一些部分视图和自定义绑定到控制器,因为数据传入,但我无法弄清楚如何传入包含所有用户的对象,所以我可以迭代它。

如果有人能够指向我朝着正确的方向前进,我会非常高兴。

-Lost

2 个答案:

答案 0 :(得分:4)

我强烈建议您阅读Phil Haacked - Model Binding to a List。他的例子很容易扩展到使用Ajax。

答案 1 :(得分:1)

您可以在JSON中创建模型并将其发送给控制器:

JS:

var account = {
    Organization: // get from form or wherever
    Users: []
}

$('#submit').click(function() {   

    // loop through each new user div and append to the account object 
    $('.new-user').each(function() {
        var $newUser = $(this);
        Account.Users.push({
            UserFirstName: $newUser.find('.first-name').val(),
            UserLastName: $newUser.find('.last-name').val(),
            ...
        });
    });

    // ajax call to submit form with data: { Account: account }
});

HTML

<form ...>
   <!-- registration fields -->

   <!-- dynamically added new user fields - wrap in parent element -->
   <div class="new-user">
       <input class="first-name" type="text" />
       <input class="last-name" type="text" />
       ...
   </div>

   <input type="button" id="submit" value="Submit" />
</form>