2013-04-05 60 views
1

我對C#和MVC非常陌生,這可能看起來像一個基本問題,但即使在尋找具有類似問題的人之後,我也無法做到這一點工作。爲什麼提交按鈕將空數據從視圖傳遞到控制器

問題是我在編輯視圖上的提交按鈕,出於某種原因將空數據傳遞給Update方法而不是表單輸入數據。

這是視圖:

<div class="row-fluid metro"> 
<div class="span2 offset4"> 

    @using (Html.BeginForm("Update", "Realty", FormMethod.Post)) 
    { 

     @Html.HiddenFor(model => model.Address) 
     @Html.HiddenFor(model => model.Details) 
     @Html.HiddenFor(model => model.Manager) 
     @Html.ValidationSummary(true) 
     <div class="control-group"> 
      <label class="control-label">Details</label> 
      <div class="controls"> 
       @Html.EditorFor(model => model.Details) 
       @Html.ValidationMessageFor(model => model.Details) 
      </div> 
     </div> 
     <div class="control-group"> 
      <label class="control-label">Address</label> 
      <div class="controls"> 
       @Html.EditorFor(model => model.Address) 
       @Html.ValidationMessageFor(model => model.Address) 
      </div> 
     </div> 


     <div class="control-group"> 
      <label class="control-label">Manager</label> 
      <div class="controls"> 
        @Html.DropDownListFor(model => model.Manager.Id, Model.Managers) 

       </div> 
     </div> 



     <div class="form-actions"> 
      <button type="submit" class="btn btn-primary">Guardar</button> 
      <a href="@Url.Action("Index", "Realty")"><button type="button" class="btn">Cancelar</button></a> 
     </div> 
    } 
</div> 

這是視圖模型 公共類RealtyViewModel {/// /// 獲取或設置ID。 /// public int Id {get;組; }

public string Address { get; private set; } 

    /// <summary> 
    /// Gets the details. 
    /// </summary> 
    public string Details { get; private set; } 
    public List<HomeViewModel> Homes { get; private set; } 

    /// <summary> 
    /// Gets the manager. 
    /// </summary> 





    public IEnumerable<SelectListItem> Managers { get; set; } 

    public ManagerViewModel Manager { get; private set; } 
    public RealtyViewModel(int id,string Address, string Details, ManagerViewModel Manager) 
    { 
     this.Id = id; 
     this.Address = Address; 
     this.Details = Details; 
     this.Manager = Manager; 
    } 

    public RealtyViewModel() {} 

} 

}

而且finnally,這是來自控制器的更新方法,如果需要:

  public ActionResult Update(RealtyViewModel model) 
    { 
     if (model.Id == 0) 
     { 
      var manager = this.managerService.Get(model.Manager.Id); 
      this.realtyService.Create(model.Address, model.Details,manager); 
     } 
     else 
     { 
      var manager = this.managerService.Get(model.Manager.Id); 
      this.realtyService.Update(model.Id,model.Address, model.Details, manager); 
     } 

     return this.RedirectToAction("Index"); 
    } 

任何幫助將不勝感激,謝謝提前。

  public ActionResult Edit(int id) 
    { 
     List<SelectListItem> managers = new List<SelectListItem>(); 
     var model = new RealtyViewModel(); 

     if (id != 0) 
     { 
      var realty = this.realtyService.Get(id); 
      var mvm = new ManagerViewModel(realty.Manager.Id, realty.Manager.Name, realty.Manager.Age); 
      model = new RealtyViewModel(realty.Id, realty.Address, realty.Details, mvm); 
     } 
     foreach (var Manager in managerService.GetAll()) 
     { 
      managers.Add(new SelectListItem { Value=Manager.Id.ToString(),Text=Manager.Name}); 
     } 
     model.Managers = managers; 
     return this.View(model); 
    } 
+0

是否調試器進入你的操作方法刪除隱藏字段?如果您的表單值通過此處,請檢查Request.Form? – Vladimirs 2013-04-05 22:05:47

+0

我進入該方法,但參數上的所有屬性都爲null。如何檢查Request.Form? – 2013-04-05 22:08:13

+0

作爲一個選項,您可以使var form = Request.Form;在你的行動中,並檢查從集合中是否存在你的價值觀。或者,您可以在調試時添加監視Request.Form並查看此值 – Vladimirs 2013-04-05 22:12:05

回答

0

嘗試從這個表格

<div class="row-fluid metro"> 
<div class="span2 offset4"> 

    @using (Html.BeginForm("Update", "Realty", FormMethod.Post)) 
     { 
     @Html.ValidationSummary(true) 
      <div class="control-group"> 
      <label class="control-label">Details</label> 
      <div class="controls"> 
       @Html.EditorFor(model => model.Details) 
       @Html.ValidationMessageFor(model => model.Details) 
      </div> 
     </div> 
     <div class="control-group"> 
      <label class="control-label">Address</label> 
      <div class="controls"> 
       @Html.EditorFor(model => model.Address) 
       @Html.ValidationMessageFor(model => model.Address) 
      </div> 
     </div> 


     <div class="control-group"> 
      <label class="control-label">Manager</label> 
      <div class="controls"> 
        @Html.DropDownListFor(model => model.Manager.Id, Model.Managers) 

       </div> 
     </div> 



     <div class="form-actions"> 
      <button type="submit" class="btn btn-primary">Guardar</button> 
      <a href="@Url.Action("Index", "Realty")"><button type="button" class="btn">Cancelar</button></a> 
     </div> 
    } 
</div> 
+0

我做到了,情況依然如此。 – 2013-04-05 22:46:37

相關問題