从 jQuery 传递到 ASP.NET 代码时,Request.Files 集合为空
Posted
技术标签:
【中文标题】从 jQuery 传递到 ASP.NET 代码时,Request.Files 集合为空【英文标题】:Request.Files Collection empty when passing from jQuery to ASP.NET code 【发布时间】:2010-10-07 00:02:28 【问题描述】:我正在运行 ASP.NET MVC Beta。我有一个通过 jQuery 运行的 AJAX 调用,它获取我的表单值并将它们发布到控制器操作。如果我在没有 AJAX 的情况下在正常形式的发布场景中运行此调用,那么一切都会正确进行。但是,一旦我合并了 jQuery 代码,除了文件之外的所有表单值都会通过。 Request.Files() 什么也不返回。我在这里还缺少其他部分吗?
html 代码:
<form action="/Images/AddImages/" enctype="multipart/form-data" id="frmAddImages" method="post">
<%=Html.Hidden("hfPromoId",ViewData.Model.Promotion.PromoId) %>
<table>
<tr>
<td>Images for Promo: </td>
<td><span class="promoTitle"><%=Html.Encode(ViewData.Model.Promotion.PromoName) %></span></td>
</tr>
<tr class="newImageContainer">
<td>Select Image:</td>
<td>
<input type="file" id="txtImagePath" name="txtImagePath" />
</td>
</tr>
<tr class="newImageContainer">
<td>Image Caption:</td>
<td>
<input id="txtImageCaption" name="txtImageCaption" />
</td>
</tr>
<tr>
<td><input type="submit" value="Save Image" id="AddImages" /></td>
</tr>
</table>
</form>
控制器代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddImages(bool? partial)
int promoId = Convert.ToInt32(Request.Form["hfPromoId"]);
var promo = _promoRepository.GetPromotion(promoId);
string imageCaption = Request.Form["txtImageCaption"].ToString();
string imagePath = string.Empty;
foreach (string file in Request.Files)
HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
if (hpf.ContentLength == 0)
continue;
imagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + @"Content\PromoImages",
promo.PromoId.ToString() + "__" + Guid.NewGuid().ToString() + Path.GetFileName(hpf.FileName));
hpf.SaveAs(imagePath);
_promoRepository.SaveImageForPromo(promoId, imageCaption, imagePath, this.Request);
if (partial == true)
return List(true, promoId);
return View("Images", GetModel(promoId));
jQuery 代码:
$(document).ready(function()
$('#frmAddImages').submit(function()
runAjax(form, updateImageList, 'html');
return false;
);
);
function runAjax(form, callback, format)
$.ajax(
url: form.action + '?partial=true',
type: form.method,
dataType: format,
data: $(form).serialize(),
success: callback
);
function updateImageList(result)
$('#gallery').html(result);
setElementStyling();
【问题讨论】:
【参考方案1】:是的,这是有道理的,jquery serialize 不会处理文件上传数据。您将需要查看某种插件来处理文件上传。我做了一些谷歌搜索,只找到了允许浏览按钮样式的插件。您可能必须采用 iframe 或 silverlight 路线。
更新 如评论中所述,它们是支持文件上传的jQuery Form plugin。
【讨论】:
其中一些东西对我来说还是新的。我使用 jQuery Form 插件来实现我需要的结果。谢谢!以上是关于从 jQuery 传递到 ASP.NET 代码时,Request.Files 集合为空的主要内容,如果未能解决你的问题,请参考以下文章
将数据传递到处理程序的 Jquery ajax 不起作用(Asp.net、C#、Jquery)
将 jquery json 传递到 asp.net httphandler
如何将 Dictionary<string, string> 变量从后面的代码传递到 asp.net?
无法使用 Jquery 将数据从视图发送到控制器 Asp.net MVC
将 html 标记从 jquery 发布调用发送到 asp.net 页面时,从客户端检测到潜在危险的 Request.QueryString 值