2016-09-11 4 views
-1

현재 테이블의 특정 행에 대한 업데이트를 수행하려고합니다. 예를 들어 한 페이지에서 모든 데이터를 검색하여 WebGrid에 표시했습니다.ASP.NET MVC 5의 모델 오류

WebGrid에는 Update이라고하는 button이있는 열을 추가했습니다. 사용자는 Update 버튼을 클릭하고 다른 페이지로 리디렉션되어 세부 정보를 업데이트합니다.

그러나 Update을 클릭 할 때마다이 오류가 발생합니다.

사전에 전달 모델 항목 유형 하다 '는 System.Collections.Generic.List`1 [ACIFYPJ.Models.Response] 있지만 사전 형'ACIFYPJ.Models의 모델 아이템을 필요 .응답'.

이것은 내 코드입니다.

내 컨트롤러 코드 WebGrid

@model ACIFYPJ.Models.Response 

@{ 
    ViewBag.Title = "Send your Response"; 
} 

<h2>Feedback Form</h2> 

@using (Html.BeginForm("ResponseFeedBack", "Course", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4></h4> 
     <hr /> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.responseID, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.responseID, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.responseID, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.message, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.TextAreaFor(model => model.message, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.message, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.status, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.status, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.status, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.answer, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.TextAreaFor(model => model.answer, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.answer, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

<div> 
    @Html.ActionLink("Back to Home", "Index") 
</div> 

Update 버튼을 클릭 한 후

@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> 

사용자가이 페이지로 리디렉션 될 모든 datas를 표시하는 Webgrid를 포함하는 페이지

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); 
     } 
+0

돌아 가기보기 (응답)로 인해 업데이트를 클릭 한 후 정확하게 표시된 페이지가 무엇입니까? 방법 당신은 반환보기 (응답); Response 유형 목록이지만보기에는 @model ACIFYPJ.Models.Response가 있습니다. 리디렉션 된보기에서 정확히 필요한 것을 기반으로 그 중 하나를 변경해야합니다. –

+0

'ViewAllResponse'인 첫 번째보기에는 webgrid가 표시됩니다. webgrid에는 'Update'버튼이 있습니다. 'Update' 버튼을 클릭하면 사용자는'ResponseFeedBack' 뷰로 방향이 바뀌게됩니다. 이보기는 사용자가 클릭 한 '행'을 기반으로 정보를 보여줍니다. @RaviA. – Alvin

+0

@RaviA. 오랫동안 노력해 왔지만이 문제를 해결할 수 없었습니다. 도와주세요, 고마워요! – Alvin

답변

0

동작 방식 변경

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); 
    } 
+0

당신의 방법을 시도했지만,'Update'를 클릭하면'ResponseFeedBack' 뷰로 이동하지 않습니다 ... – Alvin

+0

의미가 가지 않습니까? ResponseFeedBack이 전에 호출 되었습니까? 그렇다면 지금 호출되어야합니다. 중단 점을 넣고 확인하십시오. 솔루션을 다시 빌드하고 확인하십시오. –