2013-01-22 77 views
0

我正在使用asp.net mvc 4 VB.NET與jquery 1.8.3和jquery-ui 1.9.2和標題表明:我的jquery回調給我的控制器給我空模型。 函數確實被調用,但沒有設置我的模型的屬性。 這裏是場景:我有一個無序列表,裏面有幾個li。當我點擊li時,我從li中的隱藏字段獲得值。這個值是我想要傳遞的模型。 在我在控制器中的操作中,我使用提供的模型設置了局部視圖並將其返回。然後我用返回的部分視圖覆蓋div來完成我的jquery腳本。mvc jquery模型到控制器空

下面的代碼:

HTML DIV與列表

<div class="listContainer"> 
      <ul> 
       @For Each attachment As EPower.eSuite.Model.DTO.HRCore.Attachment In Model.Documents 
        @<li> 
         <input type="hidden" value="@attachment" class="test" /> 
         <a href="#"> 
          <span class="title">@attachment.Filename</span> 
          <span class="description">@attachment.Tag.ID</span> 
         </a> 
        </li> 
       Next 
      </ul> 
     </div> 

jQuery函數:

$('.listContainer ul li').on('click', function() { 
      var jsonModel = $(this).children('input.test').val(); 
      $.ajax({ 
       type: "POST", 
       url: '@Url.Action("SetPersonalDocumentPartial", "WhoIsWho")', 
       data: JSON.stringify(jsonModel), 
       dataType: 'json', 
       contentType: 'application/json', 
       error: function (t) { 
        $('.personalDocumentContent').html(t.responseText); 
       }, 
       success: function (result) { 
        $('.personalDocumentContent').html(result); 
       } 
      }); 
     }); 

MVC控制器行動:

<HttpPost> _ 
     Public Function SetPersonalDocumentPartial(ByVal attachment As Model.DTO.HRCore.Attachment) As ActionResult 
      Return PartialView("_ViewPersonalDocumentPartial", attachment) 
     End Function 

,目前工作的事情: 我的函數成功調用了我的MVC動作,但未設置模型屬性。 在Controller中將我的模型設置爲一個設置值時,我得到部分返回,併成功覆蓋我的div。出於某種原因,它會發生錯誤。

我希望我們可以共同努力!

回答

2

.val()方法返回一個字符串。而當你JSON.stringify一個字符串猜你會得到什麼?是的,你猜對了:一個字符串。例如:JSON.stringify('foobar')給你'foobar'。併發送foobar到您的控制器肌動蛋白根本沒有幫助模型聯編程序。

如果你想模型綁定,以便能夠從請求模型綁定確保你已經包括要在請求的束縛,這模型的所有特性:

data: JSON.stringify({ filename: $(this).children('input.test').val() }) 

這將設置您的Model.DTO.HRCore.AttachmentFileName財產。如果你有其他的屬性,請確保你也包含它們:

data: JSON.stringify({ 
    filename: $(this).children('input.test').val(), 
    someOtherProperty: 'some other value' 
}) 
+0

謝謝你的回答,但看起來我還不夠具體。我的模型落後於幾個關係層次。我也需要那些關係層次。設置每個值不是一個選項,因爲它會列出太多的屬性。 – whodares

+0

不,你很清楚。我擔心模型綁定器不是某種帶有水晶球的巫師,它將無處不在地綁定你的模型。如果您沒有將值發送給您的控制器操作,您將無法獲取它們。就這麼簡單。如果你不想發送所有的屬性,那麼只發送這個模型的id,然後使用這個id在控制器動作中查詢你的後端,以便檢索整個模型。很顯然,只有在視圖中沒有被修改的屬性纔是真實的。對於所有其他你需要發送它們,如果你希望取回他們。 –

+0

我最後的手段是將我的整個列表作爲模型從剃刀和jQuery的組合返回,然後將隱藏的字段更改爲id值。在mvc控制器操作中,我將在列表中的某個地方執行操作。然而,如果名單太大,這將會消耗大量資源,這就是我尋找這種解決方案的原因。如果你有更好的解決方案,我會永遠喜歡聽到它。我可能在這裏錯過了一些東西。 – whodares