我想让用户在文章中添加尽可能多的标签,比如我有这些简单的类:
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模型绑定。
感谢任何帮助/建议!
答案 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对象。
让我知道这是否适合您。