2013-01-13 4 views
0

각 행에 Ajax.BeginForm이있는 테이블이 있습니다. 이것은 컨트롤러에 데이터를 전달하는 데 유용합니다.onchange = this.form.submit() 대안 Ajax.BeginForm

그러나 POST (RequestsIsAjaxRequest())는 게시자가 POST (고맙습니다. HTX9가이를 지적했습니다.) 때문에 발생하지 않습니다. 실제 문제는 현재 뷰에서 부분 뷰를 업데이트하는 대신 부분 뷰를 반환한다는 것입니다.

아래에서 두 개의 필드 세트를 볼 수 있습니다. 첫 번째는 업데이트하고 싶은 부분이고 Ajax.BeginForm을 사용하여 컨트롤러에 데이터를 보내는 것입니다.

다른 단어 : 드롭 다운 목록에서 항목을 선택하면 위의 표가 업데이트되지만 새 부분보기로 열립니다.

_layout보기에 눈에 거슬리는 ajax js가 있고 비슷한 설정이 응용 프로그램의 다른 부분에서 버튼이있는 게시물 데이터에서 작동합니다.

[HttpPost] 
public ActionResult UpdateRatingListRow() 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     //Do stuff, it does not hit this part because of the isAjaxRequest(). 
     return this.PartialView("_RatingList2", myRatingListMarked); 
    } 
    return this.PartialView("_RatingList2", null); 
} 

생성 된 HTML : 여기서

<fieldset> 
    <legend>Direktbyten</legend> 
    <div id="container-grid2"> 
     @Html.Partial("_RatingList2", Model.Models2) 
    </div> 
</fieldset> 

<fieldset> 
    <legend>Omarkerade byten(@ViewBag.DirectCount)</legend> 

    <div id="RatingList"> 
    <table> 
     <thead> 
      <tr> 
       <td>Se hela</td> 
       <td>Hyra</td> 
       <td>Rum</td> 
       <td>Kvm</td> 
       <td>Gata</td> 
       <td>Område</td> 
       <td>Deras prio</td> 
       <td>Totaltvärde</td> 
       <td>Min prio</td> 
      </tr> 

     </thead> 
     <tbody> 
      @foreach (var item in Model.Models1) 
      { 
       using (Ajax.BeginForm("UpdateRatingListRow", new AjaxOptions { UpdateTargetId = "container-grid2" })) 
       { 

       @Html.Hidden("RatingListId", item.RatingListId) 
       <tr> 
        <td>@Html.ActionLink("Till annons", "ViewAd", "Ad", new { id = item.CustomerId }, null) 
        </td> 
        <td>@item.Rent</td> 
        <td>@item.Rooms</td> 
        <td>@item.SquareMeters</td> 
        <td>@item.Street</td> 
        <td>@item.Area</td> 
        <td>@item.TheirRating</td> 
        <td>@item.TotalRating</td> 
        <td> 
        @Html.Raw("<div id='" + item.RatingListId + "'>") 
         <select name="SelectedValue" onchange="this.form.submit();"> 
          <option value="0"@if (item.MyRating == "00") 
              { 
               @Html.Raw("selected") 
              }>Ny</option> 
          <option value="10" @if (item.MyRating == "10") 
               { 
                @Html.Raw("selected") 
               }>Inget intresse</option> 
          <option value="50"@if (item.MyRating == "50") 
               { 
                @Html.Raw("selected") 
               }>Svagt intressse</option> 
          <option value="60"@if (item.MyRating == "60") 
               { 
                @Html.Raw("selected") 
               }>Litet intresse-vill ej ha kontakt</option> 
          <option value="70"@if (item.MyRating == "70") 
               { 
                @Html.Raw("selected") 
               }>Intresserad-Vill ha kontakt</option> 
          <option value="80"@if (item.MyRating == "80") 
               { 
                @Html.Raw("selected") 
               }>Varit på visning-Vill gå vidare</option> 
          <option value="90"@if (item.MyRating == "90") 
               { 
                @Html.Raw("selected") 
               }>Intresserad-Vill ha kontakt</option> 
          <option value="100"@if (item.MyRating == "100") 
               { 
                @Html.Raw("selected") 
               }>Avvaktar värdar</option> 
         </select>@item.MyRating 
         @Html.Raw("</div>") 
        </td> 
       </tr> 
       } 
      } 
     </tbody> 
    </table> 
</div> 

</fieldset> 

는 컨트롤러 여기 enter image description here

+1

사용자가 드롭 다운 목록 선택을 변경하면 jQuery를 사용하여 Ajax 요청을 제출해 보았습니까? 'onchange = "this.form.submit();"을 사용하면 보통의 HTML POST로 폼을 전송하기 때문에 Request.IsAjaxRequest()가 false입니다. – HTX9

+0

@ HTX9 예. 있습니다. 내가 원하는대로 다른 테이블을 업데이트하지 않았습니다. 양식을 아약스로 게시하는 방법을 알고 있습니까? –

+0

일반적으로 Ajax.BeginForm 도우미를 사용하는 대신 jQuery를 사용하여 AJAX 요청을 작성하지만 코드를 가지고 놀고 뭔가를 생각해 볼 수 있습니다. – HTX9

답변

1

내 "fulhack"(스웨덴어 추한 해킹), 각 행의 ID와 함께 버튼을 첨가 나는 그것을 제출을 위해 부른다. 많은 코드를 다시 작성하지 않고도 깨끗한 솔루션을 원합니다.

using (Ajax.BeginForm("UpdateRatingListRow", new AjaxOptions { UpdateTargetId = "container-grid2", OnSuccess = "OnSuccess('" + item.RatingListId + "')" })) 
{ 
    <input type="submit" id="@item.RatingListId" style="position: absolute; top: -1000px"> 
    @Html.Hidden("RatingListId", item.RatingListId) 
    <tr> 
     <td>@Html.ActionLink("Till annons", "ViewAd", "Ad", new { id = item.CustomerId }, null)</td> 
     <td>@item.Rent</td> 
     <td>@item.Rooms</td> 
     <td>@item.SquareMeters</td> 
     <td>@item.Street</td> 
     <td>@item.Area</td> 
     <td>@item.TheirRating</td> 
     <td>@item.TotalRating</td> 
     <td>@Html.Raw("<div id='" + item.RatingListId + "'>") 
     <select name="SelectedValue" onchange="document.getElementById(@item.RatingListId).click();"> 
      <option value="0"@if (item.MyRating == "00")