Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 未在视图中生成HTML';使用MVC4的s foreach循环_Asp.net_Ajax_Asp.net Mvc - Fatal编程技术网

Asp.net 未在视图中生成HTML';使用MVC4的s foreach循环

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

我使用AJAX调用ActionResult并返回文件列表。数据存储在模型中的dictionary对象中,然后传递给视图。我在视图中有一个foreach循环,检查对象是否为null。如果没有,它将在字典中循环并为每个键/值对生成表行。问题是,HTML永远不会生成,也不会显示任何内容。使用Firebug,我已经完成了整个过程,所有内容都按原样返回。如果您能帮我找出原因,我们将不胜感激

AJAX:

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,是的,我只能看到这些标记之间的任何内容。