Asp.net 未在视图中生成HTML';使用MVC4的s foreach循环
我使用AJAX调用ActionResult并返回文件列表。数据存储在模型中的dictionary对象中,然后传递给视图。我在视图中有一个foreach循环,检查对象是否为null。如果没有,它将在字典中循环并为每个键/值对生成表行。问题是,HTML永远不会生成,也不会显示任何内容。使用Firebug,我已经完成了整个过程,所有内容都按原样返回。如果您能帮我找出原因,我们将不胜感激 AJAX:Asp.net 未在视图中生成HTML';使用MVC4的s foreach循环,asp.net,ajax,asp.net-mvc,Asp.net,Ajax,Asp.net Mvc,我使用AJAX调用ActionResult并返回文件列表。数据存储在模型中的dictionary对象中,然后传递给视图。我在视图中有一个foreach循环,检查对象是否为null。如果没有,它将在字典中循环并为每个键/值对生成表行。问题是,HTML永远不会生成,也不会显示任何内容。使用Firebug,我已经完成了整个过程,所有内容都按原样返回。如果您能帮我找出原因,我们将不胜感激 AJAX: function () { $.ajax({ url: '@Url.Action("GetExp
function () {
$.ajax({
url: '@Url.Action("GetExpenseReportUploads", "MyExpenseReports")',
type: "GET",
async: true,
cache: false,
data: { DirectoryName: "ER_#=EPR_ID#" },
success: function() {
alert("success!");
},
error: function(errorThrown) {
console.log(errorThrown);
}
});
}
控制员:
public ActionResult GetExpenseReportUploads(string DirectoryName)
{
ExpenseReport.MVC.Models.MyExpenseReports model = new MyExpenseReports();
IEnumerable<string> fileArray = Directory.EnumerateFiles(Server.MapPath("~/Files/" + DirectoryName + "/")).Select(fn => "~/Files/" + DirectoryName + "/" + Path.GetFileName(fn));
//model.EPR_Uploads = Path.GetFileName(fileArray);
Dictionary<string, string> fileNames = new Dictionary<string, string>();
foreach (string filePath in fileArray)
{
string fileName = Path.GetFileName(filePath);
fileNames.Add(filePath, fileName);
model.EPR_Uploads = fileNames;
}
model.EPR_Upload_DirectoryName = DirectoryName;
return View(model);
}
公共操作结果GetExpenseReportUploads(字符串DirectoryName)
{
ExpenseReport.MVC.Models.MyExpenseReports模型=新建MyExpenseReports();
IEnumerable fileArray=目录.EnumerateFiles(Server.MapPath(“~/Files/”+DirectoryName+“/”)。选择(fn=>“~/Files/”+DirectoryName+“/”+Path.GetFileName(fn));
//model.EPR_Uploads=Path.GetFileName(fileArray);
字典文件名=新字典();
foreach(fileArray中的字符串文件路径)
{
字符串fileName=Path.GetFileName(filePath);
添加(文件路径、文件名);
model.EPR_Uploads=文件名;
}
model.EPR\u Upload\u DirectoryName=目录名;
返回视图(模型);
}
观点:
<table>
@if (Model.EPR_Uploads != null)
{
foreach (KeyValuePair<string, string> upload in Model.EPR_Uploads)
{
<tr>
<td>
@using (Html.BeginForm("DeleteUpload", "MyExpenseReports", FormMethod.Post))
{
@Html.HiddenFor(m => m.FileId, new { @value = @upload.Value })
@Html.HiddenFor(m => m.EPR_Upload_DirectoryName)
}
<input type="submit" id="DeleteUploadBtn" value="Delete File" formaction="@Url.Action("DeleteUpload", "MyExpenseReports", new { FileId = @upload.Value, EPR_ID = "#=EPR_ID#", DirectoryName = Model.EPR_Upload_DirectoryName })" />
</td>
<td>
</td>
<td>
</td>
</tr>
}
}
@if(Model.EPR_上传!=null)
{
foreach(模型中的KeyValuePair上载.EPR_上载)
{
@使用(Html.BeginForm(“DeleteUpload”,“MyExpenseReports”,FormMethod.Post))
{
@Html.HiddenFor(m=>m.FileId,新的{@value=@upload.value})
@HiddenFor(m=>m.EPR\u Upload\u DirectoryName)
}
}
}
您混合了服务器端处理和客户端处理。如果希望在客户端AJAX调用后构建表,则不希望使用服务器端模型(
model.EPR\u Uploads
)
相反,使用加载后客户端调用来构建HTML。例如:
function () {
$.ajax({
url: '@Url.Action("GetExpenseReportUploads", "MyExpenseReports")',
type: "GET",
async: true,
cache: false,
data: { DirectoryName: "ER_#=EPR_ID#" },
success: function(data, textStatus, jqXHR) {
$("#tableId").append("<tr><td>" + data.EPR_Upload_DirectoryName + "</td></tr>";
},
error: function(errorThrown) {
console.log(errorThrown);
}
});
函数(){
$.ajax({
url:'@url.Action(“GetExpenseReportUploads”,“MyExpenseReports”),
键入:“获取”,
async:true,
cache:false,
数据:{DirectoryName:“ER##=EPR#u ID#”},
成功:函数(数据、文本状态、jqXHR){
$(“#tableId”).append(“+data.EPR_Upload_DirectoryName+”;
},
错误:函数(错误抛出){
console.log(错误抛出);
}
});
您需要更改控制器以返回JSON格式的数据,以便在客户端正确解析数据
希望这能有所帮助。Html.BeginForm不应该在循环之外吗?谢谢你的回复。我只是试着把它放在循环之外,甚至试着删除那块代码,但仍然没有显示出来。有趣的是,如果我把任何文本或代码放在它显示的循环之外。然后r模型必须为空。您的问题有点令人困惑。您是否看到
按预期返回,但它没有显示在您的页面上?或者ajax响应返回一个空的
?Ballbin,是的,我只能看到这些标记之间的任何内容。