Asp.net jQuery和@Html.TextBoxfor()

Asp.net jQuery和@Html.TextBoxfor(),asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我目前拥有以下代码: [HttpPost] public ActionResult Index(IList<LocalPageModel> postPages, IEnumerable<HttpPostedFileBase> files) { if (ModelState.IsValid) { foreach (HttpPos

我目前拥有以下代码:

        [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");
        }
<script>

var i = 0;

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

</script>

如何使它在用户单击JavaScript按钮时,新文本将附加到页面,并且
u.PostPages[x]
将增加?

如果您想在客户端上完成所有操作(无AJAX),可能根本不使用MVC帮助程序,而是手动执行-您知道将呈现的HTML,因此只需执行以下操作:

var i = 0;
$("#add-page").click(function () {
   $("#page").append('<input type="text" name="PostPages[' + (i++) + '].Title">');
});
var i=0;
$(“#添加页面”)。单击(函数(){
$(“#页”)。附加(“”);
});

也许可以稍微清理一下代码,这样引号就不会太混乱,但您会想到…

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

        [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");
        }
<script>

var i = 0;

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

</script>

var i=0;
$(“#添加页面”)。单击(函数(){
我++
$(“#page”).append('@Html.TextBoxFor(u=>u.PostPages['+i+'].Title');
});

下面是一个小的工作示例:

您没有通过视图,但我假设您的顶部有以下内容:

@model = ManagePagesModel
如果是这种情况,则可以使用以下@foreach循环页面模型:

$("#add-page).click(function() {
@foreach(var pageModel in Model.PostPages){
 $("#page").append('<div id="page"> @Html.TextBoxFor(u => pageModel.Title) </div>');
}); 
$(“#添加页面)。单击(函数(){
@foreach(Model.PostPages中的var pageModel){
$(“#page”).append('@Html.TextBoxFor(u=>pageModel.Title');
}); 

我看不出这是可行的。我想它会在页面加载时抛出一个异常,因为你正在将一个javascript变量传递给serversude html helper。@Stephen我已经编辑了一点我的答案。在那一刻,它还不是一个html.helper。它只是一个你附加在div中的文本。我不会和你争论,并把它放在这里:如果它只是文本,你就可以在div中追加而不是Html帮助程序,如果字符串终止正确(而不是错误的话),您只需要在div中填充
@Html.TextBoxFor(u=>u.PostPages[whatevercounter i位于].Title')