无法使用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直接在此刻执行的帖子。
通过引用局部视图(_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直接在循环中