gpt4 book ai didi

jquery - 使用 MVC 从标准 Html 表单回发部分 View

转载 作者:行者123 更新时间:2023-12-01 00:12:29 25 4
gpt4 key购买 nike

我的 MVC View 上有一个文件上传按钮。文件上传后,页面上的 FileList 部分 View 应该刷新。

我尝试使用Ajax.BeginForm()上传,但发现Ajax不会提交文件数据。

我现在可以使用 jQuery Form plugin 进行文件上传。 ,它允许您 ajax 普通的 Html.BeginForm() 提交方法。

使用这种方法还可以触发部分页面更新吗?

最佳答案

是的,您可以使用 .ajaxForm 中的 success 选项从文件上传中传回数据,然后将该数据传递到 PartialView 或仅刷新部分。

     // Setup the from plugin
$('#formId').ajaxForm(
success: function(data) { UploadSuccess(data); },
dataType: 'json',
iframe:true);
$('#formId').submit();

// Success callback fundtion
function UploadSuccess(data)
{
// You can then access any data in the JSON object and pass it in the route to the partial
$('#divId').load('/FileList/' + data.FileName);
}

// Original HTML of partial
<div id="divId">
<%Html.RenderPartial("FileList");%>
</div>

// Action to handle upload
public FileUploadJSONResult Upload()
{
FileUploadJSONResult result;

try
{
if (Request.Files.Count > 0)
{
// Logic to save file goes here

result = new FileUploadJSONResult()
{
Data = new
{
FileName = "Test filename",
ErrorMessage = string.Empty
}
};
}
else
{
result = new FileUploadJSONResult
{
Data = new
{
FileName = string.Empty,
LogicalName = string.Empty,
ErrorMessage = "No file to upload. Please select a file to upload."
}
};
}
}
catch (Exception e)
{
Exception root = e;
while ((root.InnerException) != null)
{
root = root.InnerException;
}

result = new FileUploadJSONResult
{
Data = new
{
FileName = string.Empty,
LogicalName = string.Empty,
ErrorMessage = root.Message
}
};
}

return result;
}

// Then needed to wrap the JSON result due to the iframe textarea issue with this plugin
public class FileUploadJSONResult : JsonResult
{
/// <summary>
/// The following explanation of this code is from http://www.malsup.com/jquery/form:
///
/// Since it is not possible to upload files using the browser's XMLHttpRequest object, the Form Plugin
/// uses a hidden iframe element to help with the task. This is a common technique, but it has inherent limitations.
/// The iframe element is used as the target of the form's submit operation which means that the server response is
/// written to the iframe. This is fine if the response type is HTML or XML, but doesn't work as well if the
/// response type is script or JSON, both of which often contain characters that need to be repesented using
/// entity references when found in HTML markup.
/// To account for the challenges of script and JSON responses, the Form Plugin allows these responses to be
/// embedded in a textarea element and it is recommended that you do so for these response types when used in
/// conjuction with file uploads. Please note, however, that if a file has not been selected by the user for the
/// file input then the request uses normal XHR to submit the form (not an iframe). This puts the burden on your
/// server code to know when to use a textarea and when not to. If you like, you can use the iframe option of the
/// plugin to force it to always use an iframe mode and then your server can always embed the response in a textarea.
/// </summary>
/// <param name="context">Controller context</param>
public override void ExecuteResult(ControllerContext context)
{
this.ContentType = "text/html";
context.HttpContext.Response.Write("<textarea>");
base.ExecuteResult(context);
context.HttpContext.Response.Write("</textarea>");
}
}

关于jquery - 使用 MVC 从标准 Html 表单回发部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com