c# - Asp.Net Framework MVC 5 - 上传文件时如何防止整个视图被重新加载
问题描述
在单击之前单击 之后 我正在尝试仅在模态(引导程序)中使用我刚刚上传的文件列表进行更新。我正在返回 Json 中的部分视图。问题是当文件上传完成并且json返回覆盖页面时,整个View被重新加载。
我尝试使用 ajax 仅更新页面的一部分,但控制器不了解如何发送 IEnumerable HttpPostedFileBase。
有谁知道一种简单的方法并仅以模式加载 UploadQuerys 的结果?
_UploadQuerys.cshtml
@model Packer_v2.Models.PackageViewModel
@using (Html.BeginForm("UploadQuerys", "Package", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="well">
<table class="table table-striped">
<tr>
<td>Arquivo : </td>
<td><input type="file" id="File" name="File" multiple /></td>
<td> </td>
<td><input type="submit" name="submit" id="Files" value="Enviar Arquivo" /></td>
</tr>
<tr>
<td>@ViewBag.Mensagem</td>
</tr>
</table>
</div>
}
类 PackageViewModel
public class PackageViewModel
{
public int IdEps { get; set; }
public int? IdProject { get; set; }
public int? IdSolution { get; set; }
public int? IdDtbase { get; set; }
public bool HasSqlScripts { get; set; }
public int? IdSqlComandType { get; set; }
public int? IdSqlItenType { get; set; }
public int? IdQuery { get; set; }
public Query Query { get; set; }
public UploadFileResult File { get; set; }
public List<Query> Querys { get; set; }
//public List<ScriptType> ScriptType { get { return GetScriptTypes(); } }
public List<Eps> EpsList { get; set; }
public List<Project> Projects { get; set; }
public List<Solution> Solutions { get; set; }
public List<Dtbase> Dtbases { get; set; }
public List<SqlComandType> GetSqlComandTypes()
{
List<SqlComandType> _List = new List<SqlComandType>();
_List.Add(new SqlComandType() { IdSqlComandType = 1, NmSqlComandType = "Update" });
_List.Add(new SqlComandType() { IdSqlComandType = 2, NmSqlComandType = "Drop" });
_List.Add(new SqlComandType() { IdSqlComandType = 3, NmSqlComandType = "Alter" });
_List.Add(new SqlComandType() { IdSqlComandType = 4, NmSqlComandType = "Create" });
return _List;
}
public List<SqlItenType> GetSqlItenTypes()
{
List<SqlItenType> _List = new List<SqlItenType>();
_List.Add(new SqlItenType() { IdSqlItenType = 1, NmSqlItenType = "Table" });
_List.Add(new SqlItenType() { IdSqlItenType = 2, NmSqlItenType = "View" });
_List.Add(new SqlItenType() { IdSqlItenType = 3, NmSqlItenType = "Procedure" });
_List.Add(new SqlItenType() { IdSqlItenType = 4, NmSqlItenType = "Column" });
return _List;
}
}
public class SqlComandType
{
public int IdSqlComandType { get; set; }
public string NmSqlComandType { get; set; }
}
public class SqlItenType
{
public int IdSqlItenType { get; set; }
public string NmSqlItenType { get; set; }
}
public class UploadFileResult
{
public IEnumerable<HttpPostedFileBase> File { get; set; }
}
包控制器
public class PackageController : Controller
{
private PackerContext db = new PackerContext();
private List<Query> AllQuerys;
// GET: Eps
public ActionResult Index()
{
var vm = this.GetPackage();
return View("Index", vm);
}
private PackageViewModel GetPackage()
{
var vm = new PackageViewModel();
vm.EpsList = db.Eps.ToList();
vm.Projects = new List<Project>();
vm.Solutions = new List<Solution>();
vm.Dtbases = new List<Dtbase>();
vm.Querys = new List<Query>();
return vm;
}
public JsonResult GetProjectsByEps(int pIdEps)
{
var projects = db.Project.Where(x => x.idEps == pIdEps).ToList();
var vm = new PackageViewModel();
vm.Projects = projects;
var partial = PartialView("_GetProjectsByEpsDropDownList", vm).RenderToString();
return Json(new { status = "ok", partialView = partial }, JsonRequestBehavior.AllowGet);
}
public JsonResult GetSolutionsByProject(int pIdProject)
{
var solutions = db.Solution.Where(x => x.IdProject == pIdProject).ToList();
var vm = new PackageViewModel();
vm.Solutions = solutions;
var partial = PartialView("_GetSolutionsByProjectDropDownList", vm).RenderToString();
return Json(new { status = "ok", partialView = partial }, JsonRequestBehavior.AllowGet);
}
public JsonResult GetDatabasesBySolution(int pIdSolution)
{
var IdsSolutions = db.DbSolution.Where(x => x.IdSolution == pIdSolution).ToList();
var _Dtbases = new List<Dtbase>();
foreach (var s in IdsSolutions)
{
var inserir = db.Dtbase.Where(x => x.IdDtbase == s.IdDtbase).FirstOrDefault();
_Dtbases.Add(inserir);
}
var vm = new PackageViewModel();
vm.Dtbases = _Dtbases;
var partial = PartialView("_GetDatabasesBySolutionDropDownList", vm).RenderToString();
return Json(new { status = "ok", partialView = partial }, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult UploadQuerys(UploadFileResult _pFiles)
{
//AllQuerys = new List<Query>();
List<Query> TemporaryQuerys = new List<Query>();
try
{
string fileName = "";
string sendingFiles = "";
foreach (var file in _pFiles.File)
{
if (file.ContentLength > 0)
{
var Query = new Query();
fileName = Path.GetFileName(file.FileName);
var way = Path.Combine(Server.MapPath("~/App_Data/Packages/Querys"), fileName);
file.SaveAs(way);
Query.IsActive = true;
Query.NmFile = fileName;
TemporaryQuerys.Add(Query);
}
sendingFiles = sendingFiles + " , " + fileName;
}
ViewBag.Mensagem = "Arquivos enviados : " + sendingFiles + " , com sucesso.";
}
catch (Exception ex)
{
ViewBag.Mensagem = "Erro : " + ex.Message;
}
var vm = new PackageViewModel();
vm.Querys = TemporaryQuerys;
var partial = PartialView("_GetQuerys", vm).RenderToString();
return Json(new { status = "ok", partialView = partial }, JsonRequestBehavior.AllowGet);
}
索引.cshtml
@model Packer_v2.Models.PackageViewModel
@{
ViewBag.Title = "Insert Package";
}
<h2>Iniciando o PACOTE</h2>
<div class="panel-body">
<div class="col-md-12">
<div class="row">
<div class="col-md-3">
<label>* EPS</label>
@Html.DropDownListFor(model => model.IdEps, Model.EpsList.OrderBy(o => o.NmEps).Select(x => new SelectListItem
{
Value = x.IdEps.ToString(),
Text = x.NmEps
}), "Selecione", new { @class = "form-control", @required = "required" })
</div>
<div class="col-md-6">
<label>* Project</label>
<div id="divGetProjectsByEps">
@Html.Partial("_GetProjectsByEpsDropDownList")
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<label>* Solution</label>
<div id="divGetSolutionsByProject">
@Html.Partial("_GetSolutionsByProjectDropDownList")
</div>
</div>
<div class="col-md-5">
<label>Selecione os itens do seu Pacote:</label>
<div>
@Html.CheckBoxFor(x => x.HasSqlScripts, new { @checked = "checked", @class = "form-check-input", @id = "HasSqlScripts" })
<label> Querys</label>
</div>
@*<div>
@Html.CheckBoxFor(x => x.HasSqlScripts, new { @checked = "checked", @class = "form-check-input", @id = "HasSqlScripts" })
<label> Itens de App</label>
</div>*@
</div>
</div>
@*<label>* Solution</label>
<div id="divItensPacker">
@Html.Partial("_TicketCreate")
</div>*@
<div id="divHasSQL" style="display: none;">
<div class="row">
<div class="col-md-3">
<label>Scripts SQL</label>
<div id="divGetDatabasesBySolution">
@Html.Partial("_GetDatabasesBySolutionDropDownList")
</div>
</div>
@*<div class="col-md-3">
<label>* Comando</label>
@Html.DropDownListFor(model => model.IdSqlComandType, Model.GetSqlComandTypes().OrderBy(o => o.NmSqlComandType).Select(x => new SelectListItem
{
Value = x.IdSqlComandType.ToString(),
Text = x.NmSqlComandType
}), "Selecione", new { @class = "form-control", @required = "required", @value = "0" })
</div>
<div class="col-md-3">
<label>* Item Sql</label>
@Html.DropDownListFor(model => model.IdSqlItenType, Model.GetSqlItenTypes().OrderBy(o => o.NmSqlItenType).Select(x => new SelectListItem
{
Value = x.IdSqlItenType.ToString(),
Text = x.NmSqlItenType
}), "Selecione", new { @class = "form-control", @required = "required", @value = "0" })
</div>
</div>*@
@*<div class="row">
<div class="col-md-9">
@Html.Partial("_UploadQuerys")
</div>
</div>*@
<div class="col-md-3">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-lg">Inserir Querys</button>
<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
@*<label>* Comando</label>
@Html.DropDownListFor(model => model.IdSqlComandType, Model.GetSqlComandTypes().OrderBy(o => o.NmSqlComandType).Select(x => new SelectListItem
{
Value = x.IdSqlComandType.ToString(),
Text = x.NmSqlComandType
}), "Selecione", new { @class = "form-control", @required = "required", @value = "0" })
<label>* Item Sql</label>
@Html.DropDownListFor(model => model.IdSqlItenType, Model.GetSqlItenTypes().OrderBy(o => o.NmSqlItenType).Select(x => new SelectListItem
{
Value = x.IdSqlItenType.ToString(),
Text = x.NmSqlItenType
}), "Selecione", new { @class = "form-control", @required = "required", @value = "0" })*@
<div class="row">
<div class="col-md-9">
@Html.Partial("_UploadQuerys")
@*<table class="table table-striped">
<tr>
<td>Arquivo : </td>
<td><input type="file" id="File" name="File" multiple /></td>
<td> </td>
<td><input type="submit" name="submit" id="Files" value="Enviar Arquivo" /></td>
</tr>
<tr>
<td>@ViewBag.Mensagem</td>
</tr>
</table>*@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@section Scripts {
<script type="text/javascript">
var form = $("#form");
var registerForm = new RegisterForm(form);
registerForm.urlSave = "/Package/SavePackage";
registerForm.urlDelete = "/Package/DeletePackage"
blockAllFields();
/**/
//$(document).ready(function () { }
// 'click', '#Files', function () {
// getQuerys();
//});
/**/
$(document).on('click', '#Files', function () {
console.log("clicou");
getQuerys();
});
/*Changes*/
$(document).on('change', '#IdEps', function () {
let idEps = $("#IdEps").val();
getProjectsByEps(idEps);
var select = false;
if (idEps == "")
select = true;
controlerFields(select, 'IdProject');
});
$(document).on('change', '#IdProject', function () {
let idProject = $("#IdProject").val();
getSolutionsByProject(idProject);
var select = false;
if (idProject == "")
select = true;
controlerFields(select, 'IdSolution');
});
$(document).on('change', '#IdSolution', function () {
let idSolution = $("#IdSolution").val();
getDatabasesBySolution(idSolution);
var select = false;
if (idSolution == "")
select = true;
controlerFields(select, 'HasSqlScripts');
});
$("#HasSqlScripts").change(function () {
let hasSqlScriptsCheck = $('#HasSqlScripts').is(':checked');
showDivHasChecked(hasSqlScriptsCheck, 'divHasSQL');
var select = false;
if (hasSqlScriptsCheck == "")
select = true;
controlerFields(select, 'IdDtbase');
});
/*Outras Funções */
function controlerFields(pSelect, pFldName) {
document.getElementById(pFldName).disabled = pSelect;
}
function blockAllFields() {
controlerFields(true, 'IdProject');
controlerFields(true, 'IdSolution');
controlerFields(true, 'HasSqlScripts');
controlerFields(true, 'IdDtbase');
}
function showDivHasChecked(phasChecked, pdivName) {
var stats = 'none';
if (phasChecked == true) {
stats = 'block';
}
document.getElementById(pdivName).style.display = stats;
}
/*Changes Açtions*/
function getQuerys() {
}
//function getQuerys() {
// console.log("entrou");
// var fileUpload = $("#File").get(0);
// var files = fileUpload.files;
// var data = new FormData();
// for (var i = 0; i < files.length; i++) {
// data.append(files[i].name, files[i]);
// }
// console.log("send");
// $.ajax({
// url: "/Package/UploadQuerys",
// method: 'post',
// data: new FormData($('#File')[0]),
// cache: false,
// contentType: false,
// processData: false,
// success: function (result) {
// console.log(result);
// }
// });
// //var pIdProject;
// //$.ajax({
// // async: true,
// // "url": "/Package/UploadQuerys",
// // "type": "POST",
// // data: data,
// // //success: function (message) {
// // // alert(message);
// // //},
// // //error: function () {
// // // alert("There was error uploading files!");
// // //}
// // //data: { _pFiles: data },
// //})
// //$.ajax({
// // type: "POST",
// // url: "Demo_02/Demo/UploadFilesAjax",
// // contentType: false,
// // processData: false,
// // data: data,
// // success: function (message) {
// // alert(message);
// // },
// // error: function () {
// // alert("There was error uploading files!");
// // }
// //$.ajax({
// // async: true,
// // "url": "/Package/UploadQuerys",
// // "type": "POST",
// // data: { _pFiles: teste },
// //})
// //.done(function (msg) {
// // if (msg.status.includes("nok")) {
// // let results = "Ocorreram erros ao buscar os registros!";
// // if (msg.mesage != undefined && msg.mesage != '') {
// // results = msg.mesage;
// // }
// // toast("Atenção", results, "error");
// // console.log(msg.error);
// // } else {
// // if (msg.partialView != undefined && msg.partialView != '') {
// // $("#divGetQuerys").html(msg.partialView);
// // //if (pIdProject != "" && pIdProject != undefined) {
// // // $("#pIdProject").val(pIdProject);
// // //}
// // }
// // }
// //})
// //.fail(function (jqXHR, textStatus, msg) {
// // console.log(`${textStatus} - ${msg} - ${jqXHR}`);
// //});
//}
function getProjectsByEps(pIdEps) {
var pIdProject;
$.ajax({
async: true,
"url": "/Package/GetProjectsByEps",
"type": "GET",
data: { pIdEps: pIdEps },
})
.done(function (msg) {
if (msg.status.includes("nok")) {
let results = "Ocorreram erros ao buscar os registros!";
if (msg.mesage != undefined && msg.mesage != '') {
results = msg.mesage;
}
toast("Atenção", results, "error");
console.log(msg.error);
} else {
if (msg.partialView != undefined && msg.partialView != '') {
$("#divGetProjectsByEps").html(msg.partialView);
if (pIdProject != "" && pIdProject != undefined) {
$("#pIdProject").val(pIdProject);
}
}
}
})
.fail(function (jqXHR, textStatus, msg) {
console.log(`${textStatus} - ${msg} - ${jqXHR}`);
});
}
function getSolutionsByProject(pIdProject) {
var pIdSolution;
$.ajax({
async: true,
"url": "/Package/GetSolutionsByProject",
"type": "GET",
data: { pIdProject: pIdProject },
})
.done(function (msg) {
if (msg.status.includes("nok")) {
let results = "Ocorreram erros ao buscar os registros!";
if (msg.mesage != undefined && msg.mesage != '') {
results = msg.mesage;
}
toast("Atenção", results, "error");
console.log(msg.error);
} else {
if (msg.partialView != undefined && msg.partialView != '') {
$("#divGetSolutionsByProject").html(msg.partialView);
if (pIdSolution != "" && pIdSolution != undefined) {
$("#pIdSolution").val(pIdSolution);
}
}
}
})
.fail(function (jqXHR, textStatus, msg) {
console.log(`${textStatus} - ${msg} - ${jqXHR}`);
});
}
function getDatabasesBySolution(pIdSolution) {
var pIdDtbase;
$.ajax({
async: true,
"url": "/Package/GetDatabasesBySolution",
"type": "GET",
data: { pIdSolution: pIdSolution },
})
.done(function (msg) {
if (msg.status.includes("nok")) {
let results = "Ocorreram erros ao buscar os registros!";
if (msg.mesage != undefined && msg.mesage != '') {
results = msg.mesage;
}
toast("Atenção", results, "error");
console.log(msg.error);
} else {
if (msg.partialView != undefined && msg.partialView != '') {
$("#divGetDatabasesBySolution").html(msg.partialView);
if (pIdDtbase != "" && pIdDtbase != undefined) {
$("#pIdDtbase").val(pIdDtbase);
}
}
}
})
.fail(function (jqXHR, textStatus, msg) {
console.log(`${textStatus} - ${msg} - ${jqXHR}`);
});
}
</script>
}
解决方案
推荐阅读
- hibernate - @SQLInsert 如何自动插入所有字段?
- regex - .htaccess 重定向错误,查询字符串更改
- c# - 使用进程调用 cmd.exe 命令的 NUnit 测试未通过
- jquery - 如何更改没有任何标签的文本?
- c# - 从数百万个文本文件中查找更新记录
- python - 如何用 Tweepy 正确回复?
- java - JDBI - 将 Bean 与列表属性绑定
- powershell - 通过 Powershell 发送 POST RestAPI 但保持 auth 标头为空或方案无效?
- python - 以 X 天的频率获取一年中的日期
- ios - tableview滚动到底部问题