2012-11-13 74 views
1

我正在開發一個與asp.net mvc 3的Web應用程序,並試圖修改列表,它包含在我的ViewModel中,然後將其與JQuery更改發佈到我的控制器。問題是ViewModel在抵達時不包含任何值。ViewModel列表數據與JQuery發佈後丟失

的的ViewModels看起來像這樣:

public class OfferListViewModel 
{ 
    public List<OfferViewModel> Offers { get; set; } 
} 

public class OfferViewModel 
{ 
    public Guid Id { get; set; } 

    public double Total { get; set; } 
} 

控制器方法:

[Authorize] 
public ActionResult Index() 
{ 
    OfferList list = this._offerService.GetOfferListById(1234); 

    OfferListViewModel model= new OfferListViewModel 
    { 
     Offers = list.OfferListProducts.Where(o => o.Product.ProductCategory == (int)ProductCategory.Print).ToViewModel().ToList() 
    }; 

    return View(model); 
} 

list.OfferListProducts被一個IEnumerable轉換與輔助ToViewModel(),最後ToList()

[HttpPost] 
[Authorize] 
public ActionResult UpdateOfferList(OfferListViewModel offers) 
{ 
    // do something 
} 

查看:

@model Models.OfferListViewModel 

<form id="mywall-updateofferlist-form" class="form-horizontal" action="@Url.Action("UpdateOfferList", "MyWall")" method="post"> 
    @Html.HiddenFor(model => model.ProductCategory) 
    <table class="table table-hover"> 
     <thead> 
      <tr> 
       <th>Total</th> 
      </tr> 
     </thead> 
     <tbody> 
      @for (int count=0; count < Model.Offers.Count(); count++) 
      { 
       @Html.HiddenFor(model => model.Offers[count].Id) 
       <tr> 
        <td>@Html.EditorFor(model => model.Offers[count].Total)</td> 
       </tr> 
      } 
     </tbody> 
    </table> 
</form> 

的JavaScript:

<script type='text/javascript'> 
    $(function() { 
     $('form[id=mywall-updateofferlist-form]').change(function() { 
      if ($(this).valid()) { 
       $.post($(this).attr('action'), $(this).serialize(), function (data) { 
        if (data.success) { 
         // do something 
        } else { 
         // do something else 
        } 
       }); 
       return false; 
      } 
     }); 
    }); 
</script> 

可有人發現一個錯誤?我在ViewModels中有更多的屬性,這些屬性在我的控制器後置方法中不一定需要,因此沒有映射/省略以簡化這裏的描述。不知怎的,這可能是一個問題嗎? Id是用HiddenFor映射的,應該在ViewModel中包含post和其他值之後應該爲null?

編輯:

螢火蟲後:

Offers[0].Id 1c5bdc21-8f8c-4ad2-a4a0-49e4011e3ba6 
Offers[0].Total 0.6 
Offers[1].Id 12ede957-8a7e-47a9-8e86-a388d60ea2d9 
Offers[1].Total 1.12 

Offers%5B0%5D.Id=1c5bdc21-8f8c-4ad2-a4a0-49e4011e3ba6&Offers%5B0%5D.Total=0.6&Offers%5B1%5D.Id=12ede957-8a7e-47a9-8e86-a388d60ea2d9&Offers%5B1%5D.Total=1.12 

我的問題是與此類似:View Model IEnumerable<> property is coming back null (not binding) from post method?

但我已經將我的IEnumerable張貼時顯示正常,但不映射列表回到控制器。

回答

0
<script type='text/javascript'> 
    $(function() { 
     $('form[id=mywall-updateofferlist-form]').change(function() { 

      var $this = $(this); 
      if ($this.valid()) { 
       $.post($this.attr('action'), $this.serialize(), function (data) { 
        if (data.success) { 
         // do something 
        } else { 
         // do something else 
        } 
       }); 
       return false; 
      } 
     }); 
    }); 
</script> 

嘗試...... $(this)不等於表單對象時,其$post函數內部...

你應該使用Firebug的控制檯來查看是否正確後信息打通。

+0

感謝您的回覆。我嘗試了你的解決方案,但它沒有改變,螢火蟲的帖子對我來說很好。 (見編輯) – niklr