无法使用Ajax发布.在MVC 3中使用PagedList从视图到控制器的BeginForm

本文关键字:视图 BeginForm PagedList 控制器 Ajax 发布 MVC | 更新日期: 2023-09-27 18:17:03

我在使用Ajax发布值时遇到了麻烦。在我的应用程序中,使用Pagelist从视图BeginForm到控制器。NuGet中的Mvc包。下面是我的一个删除操作代码示例:

模型:

namespace test1.Models
{
    public class UploadItem
    {
        public string FileName { get; set; }
        public string Directory { get; set; }
    }
}

视图:

@model PagedList.IPagedList<UploadItem>
@using test1.Models;
@using PagedList.Mvc;
@using PagedList;
@foreach (UploadItem item in Model)
{
    @using (Ajax.BeginForm("DeleteItem", "Upload", new AjaxOptions {HttpMethod = "POST"}))
    {
        @Html.HiddenFor(m => item.FileName)
        @Html.HiddenFor(m => item.Directory)
        <input type="submit" value="Delete" />
    }
}

控制器:

using System.Web.Mvc;
using test1.Models;
using PagedList.Mvc;
using PagedList;
namespace test1.Controllers
{
    public class UploadController
    {
        [HttpPost]
        public ActionResult DeleteItem(IPagedList<UploadItem> uploadItems)
        {
            UploadHelper.DeleteFileFromDirectory(uploadItems[0].FileName,
            uploadItems[0].Directory);
            var listOfUploadedFiles = UploadHelper.GenerateListOfUploads();
            const int rows = 5;
            const int page = 1;
            int index = page.HasValue ? Convert.ToInt32(page) : 1;
            var uploadedFiles = listOfUploadedFiles.ToPagedList(index, rows);
            ViewBag.UploadedItems = uploadedFiles;
            ViewBag.PageNum = page;
            return View(uploadedFiles);
        }
    }
}

任何想法?我试图避免使用Javascript直接在此刻执行的帖子。

无法使用Ajax发布.在MVC 3中使用PagedList从视图到控制器的BeginForm

通过引用局部视图(_UploadSingleItem)解决此问题:

@model PagedList.IPagedList<UploadItem>
@using test1.Models;
@using PagedList.Mvc;
@using PagedList;
@foreach (UploadItem item in Model)
{
    @Html.Partial("_UploadSingleItem", item)
}

_UploadSingleItem视图:

@model UploadItem
@using test1.Models;
@using PagedList.Mvc;
@using PagedList;
@using (Ajax.BeginForm("DeleteItem", "Upload", new AjaxOptions {HttpMethod = "POST"}))
{
    @Html.HiddenFor(m => item.FileName)
    @Html.HiddenFor(m => item.Directory)
    <input type="submit" value="Delete" />
}

然后将控制器更改为接受List而不是IPagedList:

using System.Web.Mvc;
using test1.Models;
using PagedList.Mvc;
using PagedList;
namespace test1.Controllers
{
    public class UploadController
    {
        [HttpPost]
        public ActionResult DeleteItem(List<UploadItem> uploadItems)
        {
            UploadHelper.DeleteFileFromDirectory(uploadItems[0].FileName,
            uploadItems[0].Directory);
            var listOfUploadedFiles = UploadHelper.GenerateListOfUploads();
            const int rows = 5;
            const int page = 1;
            int index = page.HasValue ? Convert.ToInt32(page) : 1;
            var uploadedFiles = listOfUploadedFiles.ToPagedList(index, rows);
            ViewBag.UploadedItems = uploadedFiles;
            ViewBag.PageNum = page;
            return View(uploadedFiles);
        }
    }
}

现在我可以发布值了:)

似乎MVC有问题绑定正确的模型时,Ajax。Beginform直接在循环中