jQuery和@ Html.TextBoxfor()

时间:2013-08-05 18:58:54

标签: asp.net asp.net-mvc

我目前有以下代码:

        [HttpPost]
        public ActionResult Index(IList<LocalPageModel> postPages,
          IEnumerable<HttpPostedFileBase> files)
        {
            if (ModelState.IsValid)
            {
                foreach (HttpPostedFileBase file in files)
                {
                    if ((file != null) && (file.ContentLength > 0))
                    {
                        var fileName = Path.GetFileName(file.FileName);
                        var path = Path.Combine(Server.MapPath("~/App_Data/"),
                          fileName);
                        file.SaveAs(path);
                    }
                }
            }
            else
            {
                ManagePagesModel mod = new ManagePagesModel
                {
                    PostPages = postPages
                };

                return View("Index", mod);
            }
            return RedirectToAction("Index");
        }

在我看来,我有一个JavaScript按钮,它会添加div,以便用户可以发布另一个页面,例如:

$("#add-page").click(function () {
    $("#page").append('<div id="page"> @Html.TextBoxFor(u => u.PostPages[0].Title) </div>');
});

如何制作,以便当用户点击JavaScript按钮时,新文字会附加到页面 u.PostPages[x]会增加?

3 个答案:

答案 0 :(得分:3)

如果你想在客户端上做这一切(没有AJAX),也许根本不使用MVC助手,而是手动做 - 你知道将要渲染的HTML,所以就这样做:< / p>

var i = 0;
$("#add-page").click(function () {
   $("#page").append('<input type="text" name="PostPages[' + (i++) + '].Title">');
});

也许清理一下代码,所以引号不会太混乱,但是你明白了......

答案 1 :(得分:0)

要增加u.PostPages [x],您可以使用以下代码:

<script>

var i = 0;

$("#add-page").click(function () {
    i++
    $("#page").append('<div id="page"> @Html.TextBoxFor(u => u.PostPages['+i+'].Title') </div>');
});

</script>

以下是一个小工作示例:jsfiddle

答案 2 :(得分:0)

你没有超越你的观点,但我认为你在顶部有以下内容:

@model = ManagePagesModel

如果是这种情况,您可以使用以下@foreach循环浏览页面模型:

$("#add-page).click(function() {
@foreach(var pageModel in Model.PostPages){
 $("#page").append('<div id="page"> @Html.TextBoxFor(u => pageModel.Title) </div>');
});