如何将javascript-created-textbox的值传递给asp.net mvc3控制器?

时间:2011-02-24 02:46:22

标签: c# javascript jquery asp.net-mvc-3

我想让用户在文章中添加尽可能多的标签,比如我有这些简单的类:

public class Tag
{
    public string Name { get; set; }
}

public class Article
{
    public List<Tag> Tags { get; set; }

    public Article()
    {
        Tags = new List<Tag>();
    }
}

我的控制器看起来像这样:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new Article());
    }

    [HttpPost]
    public ActionResult Edit(List<Tag> tags)
    {            
        //tags is null here
        return View();
    }
}

在我看来,我只有一个简单的文本框,其中包含名为“add”的链接和一个提交按钮。单击“添加”时,它会调用一个javascript函数,该函数将获取输入的值并使用该值创建一个新的禁用文本框,然后将此禁用的文本框放在指定的div中。提交时,它会发布到主页/编辑。 “添加”部分工作正常,用户可以根据需要随时添加任意数量的标签。

问题是,在提交时,没有新创建的禁用文本框作为参数传入,tags参数始终为null。我确保生成的文本框的名称为tags [0] .Name,tags [1] .Name等。

我唯一的选择是使用$ .ajax()还是$ .post()?我有更多的文本框和下拉列表来收集我没有在这里显示的用户输入,并且创建json,用于$ .ajax或$ .post似乎不是很有趣。我希望尽可能使用mvc模型绑定。

感谢任何帮助/建议!

1 个答案:

答案 0 :(得分:1)

你可以做的是在页面的javascript内存中建立列表。

所以你在内存中创建一个Tag对象,如

var tag= new {Name=$('input-selector').val()};

然后按如下方式将其推入对象:

tagList.push(tag);

当您完成添加所有标记后,您可以按如下方式对服务器进行ajax调用:

$.ajax(
url:url,
data: {tag=$.toJSON(tagList)},
type: "POST",
dataType: "json",
success: function () {}

现在您应该可以在服务器上使用带有所需数据的List对象。

让我知道这是否适合您。