Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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
C# ASP.NET MVC 5中的模型错误_C#_Asp.net_Asp.net Mvc_Razor_Asp.net Ajax - Fatal编程技术网

C# ASP.NET MVC 5中的模型错误

C# ASP.NET MVC 5中的模型错误,c#,asp.net,asp.net-mvc,razor,asp.net-ajax,C#,Asp.net,Asp.net Mvc,Razor,Asp.net Ajax,我目前正在尝试对表的特定行进行更新。例如,在一个页面上,我检索了所有数据并将其显示在WebGrid上 在WebGrid中,我添加了一个带有按钮的列,名为Update。用户将单击Update按钮,并被重定向到另一个页面以更新详细信息 但是,每次单击Update,我都会遇到此错误 传递到字典中的模型项的类型为 'System.Collections.Generic.List'1[ACIFYPJ.Models.Response]',但 字典需要“ACIFYPJ.Models.Response”类型的模

我目前正在尝试对表的特定行进行更新。例如,在一个页面上,我检索了所有数据并将其显示在
WebGrid

WebGrid
中,我添加了一个带有
按钮的列,名为
Update
。用户将单击
Update
按钮,并被重定向到另一个页面以更新详细信息

但是,每次单击
Update
,我都会遇到此错误

传递到字典中的模型项的类型为 'System.Collections.Generic.List'1[ACIFYPJ.Models.Response]',但 字典需要“ACIFYPJ.Models.Response”类型的模型项

这是我的密码

包含显示所有数据的Webgrid的页面

@model List<ACIFYPJ.Models.Response>

@{
    ViewBag.Title = "List Of Responses";
    Layout = "~/Views/Shared/_Layout.cshtml";
    var grid = new WebGrid(Model, canPage: true, rowsPerPage: 5);
    grid.Pager(WebGridPagerModes.All);
}

<h2 style="margin-bottom: 3%; margin-top: 3%;">List Of Responses</h2>

<script src="~/Scripts/jquery-1.10.2.min.js"></script>

<script>
    $(document).ready(function () {
        $("#responseFeedBack").click(function () {

            var tr = $(this).parents('tr:first');
            var responseID = tr.find("#responseID").text();
            alert(responseID);
            var ResponseModel = {
                "responseID": responseID
            };

            $.ajax({

                url: '@Url.Action("ResponseFeedBack", "Course")',
                type: 'POST',
                data: {
                    "responseID": responseID
                },
                async: false,
                dataType: 'text',
                success: function (data) {

                }
            });
        });
    });

</script>

<div id="content">
    @grid.GetHtml(
    fillEmptyRows: false,
    tableStyle: "webgrid-table",
    headerStyle: "webgrid-header",
    footerStyle: "webgrid-footer",
    alternatingRowStyle: "webgrid-alternating-row",
    selectedRowStyle: "webgrid-selected-row",
    rowStyle: "webgrid-row-style",
    mode: WebGridPagerModes.All,
    firstText: "<< First",
    previousText: "<Prev",
    nextText: "Next >",
    lastText: "Last >>",

    columns: grid.Columns(
        grid.Column("responseID", "Response ID", format: @<text><span class="display-mode" id="responseID">@item.responseID</span></text>),

        grid.Column("name", "Sender's Name", format: @<text><span id="senderName" class="display-mode">@item.Name</span></text>),

        grid.Column("message", "Message", format: @<text><span class="display-mode"><label id="lblMessage">@item.message</label></span>
        </text>),

        grid.Column("status", "Message Status", format: @<text><span class="display-mode"><label id="lblStatus">@item.status</label></span>
        </text>),

        grid.Column("answer", "Answer", format: @<text><span class="display-mode"><label id="lblAnswer">@item.answer</label></span>
        </text>),

        grid.Column("", format: @<text>
            <button id="responseFeedBack">Reply</button>
        </text>, style: "col3Width", canSort: false)
))
</div>

<div style="margin-top: 2%;">
    @Html.ActionLink("Back to Home", "AdminIndex", "Home")
</div>
我的控制器代码

public ActionResult ViewAllResponse()
        {
            var responses = new List<Response>();
            using (ACIFYPJEntities aci = new ACIFYPJEntities())
            {
                responses = aci.Responses.ToList();
            }
            return View(responses);
        }


        public ActionResult ResponseFeedBack(int responseID)
        {
            var responses = new List<Response>();

            using (ACIFYPJEntities aci = new ACIFYPJEntities())
            {
                responses = (from c in aci.Responses
                             where c.responseID == responseID
                             select c).ToList();
            }

            return View(responses);
        }
public ActionResult ViewAllResponse()
{
var responses=新列表();
使用(acifypjenties aci=new acifypjenties())
{
responses=aci.responses.ToList();
}
返回视图(响应);
}
公共行动结果响应反馈(int响应ID)
{
var responses=新列表();
使用(acifypjenties aci=new acifypjenties())
{
响应=(来自aci.responses中的c)
其中c.responseID==responseID
选择c.ToList();
}
返回视图(响应);
}

更改您的操作方法

public ActionResult ResponseFeedBack(int responseID)
    {
        var responses = Response();

        using (ACIFYPJEntities aci = new ACIFYPJEntities())
        {
            responses = (from c in aci.Responses
                         where c.responseID == responseID
                         select c).First();
        }

        return View(responses);
    }

在返回视图(响应)中,单击“更新”后,页面上应该显示什么内容;您执行返回视图(响应)的方法;这是类型响应的列表,但在您的视图中有@model ACIFYPJ.Models.Response。您需要根据重定向视图的具体需要更改其中一个。在第一个视图中,即
ViewAllResponse
,它将显示一个webgrid。在webgrid上,将有一个
Update
按钮。单击
Update
按钮后,用户将被重定向到名为
ResponseFeedBack
的视图。此视图将根据用户单击的
行显示信息@拉维亚。@RaviA。尝试了很长时间,似乎无法解决此问题。请帮忙,谢谢!Sukesh的答案看起来不错。当你说它没有进入
响应反馈
查看到底发生了什么。它是否停留在具有webgrid视图的同一视图上。如果在
ResponseFeedBack
方法中放置断点,它是否会被命中?消息是不言自明的。您有一个视图,它需要一个类型为
Response
的模型,但您要传递它
List
。您的视图甚至没有重定向的按钮/链接。你所拥有的是多个“回复”按钮,这些按钮具有重复的
id
属性(无效的html),可以进行ajax调用(ajax调用从不重定向)到
ResponseFeedBack()
方法,该方法将
List
传递到一个视图,该视图可能是上面第二个视图,上面有
@model ACIFYPJ.Models.Response
我尝试了你的方法,但是,当我单击“更新”时,它不会转到“响应反馈”
视图…不去意味着什么?ResponseFeedBack在之前调用过吗,?如果是,那么它现在也应该被调用。放置断点并确认。重新生成解决方案并进行检查。
public ActionResult ResponseFeedBack(int responseID)
    {
        var responses = Response();

        using (ACIFYPJEntities aci = new ACIFYPJEntities())
        {
            responses = (from c in aci.Responses
                         where c.responseID == responseID
                         select c).First();
        }

        return View(responses);
    }