2013-11-20 49 views
1

我有以下的看法,主要查看的項目列表作爲displayfor: -路過DisplayFor的值,以模型綁定

 @foreach (var item in Model.Resources) { 
      <tr> 
       <td> 
        @Html.DisplayFor(modelItem => item.SystemInfo.MODEL) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.RESOURCENAME) 
       </td> 
       <td> 

        @Html.DisplayFor(modelItem => item.ResourceLocation.SiteDefinition.AccountDefinition.SDOrganization.NAME) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.ResourceLocation.SiteDefinition.SDOrganization.NAME) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.ComponentDefinition.COMPONENTNAME) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.ResourceState.STATEDESC) 
       </td> 
       <td id = "@item.RESOURCEID"> 

     @using (Ajax.BeginForm("CreateOn","VirtualMachine", new AjaxOptions { 
     InsertionMode = InsertionMode.Replace, 
     UpdateTargetId = item.RESOURCEID.ToString() , 
     LoadingElementId = "progress", 
     HttpMethod = "POST"})){ 
<span class="f">Hypervisor Server</span> 

      @Html.DropDownListFor(model =>model.VirtualMachine.ServerID, ((IEnumerable<t.Models.Server>)ViewBag.Servers).Select(option => new SelectListItem { 
       Text = (option == null ? "None" : option.Technology.Tag), 
       Value = option.ServerID.ToString(), 
       Selected = (Model != null) && (Model.VirtualMachine != null) && (option.ServerID == Model.VirtualMachine.ServerID) 
      }), "Choose...") 
    @Html.ValidationMessageFor(model =>model.VirtualMachine.ServerID) 
    @Html.Hidden("IT360id", item.RESOURCEID) 
      @Html.Hidden("CustomerName",item.ResourceLocation.SiteDefinition.AccountDefinition.SDOrganization.NAME) 
      @Html.Hidden("SiteName",item.ResourceLocation.SiteDefinition.SDOrganization.NAME) 
      @Html.Hidden("ResourceName",item.RESOURCENAME) 
     <input type="submit" value="Add To" class="btn btn-primary"/> 
     } 

但用戶可以讀取數據,並選擇創建我們的數據庫中的項目,使用ajax.beginform。但爲此,我需要將DisplayFor的某些值傳遞給模型聯編程序。目前,我添加了所有需要的數據作爲hiddenfields,然後我將這些值傳遞到我的操作方法如下: -

[HttpPost] 
     public ActionResult CreateOn(VirtualMachineOnIT360Only vm, long IT360id, string CustomerName, string SiteName, string ResourceName) 
     { 

我發現,我的做法是不是很可靠,我想弄清楚更可靠的解決方案。那麼有誰能建議嗎? 感謝

+0

它不是一個真正的好主意,創建一個窗體爲您的循環中的每個元素。這是真的嗎? – Hemadeus

+0

爲什麼這不是一個好主意? –

+0

沒關係你是對的,使用多種形式並不差。我不明白你最初想做什麼,所以我刪除了我的答案。我看到它的方式,沒有太多辦法可以做到。您仍然可以使用隱藏字段,或僅發送所選下拉列表的ID和所選資源的ID。並加載數據服務器端的其餘部分。但在你的情況下,如果數據不需要保證,我認爲隱藏域更好。 – Hemadeus

回答

1

要發佈DisplayFor回來,我更喜歡使用hiddenfor,而不是隱藏着這樣的:

  @Html.HiddenFor(item => item.RESOURCENAME); 
+0

但有沒有辦法不使用隱藏或隱藏的所有... –

+1

嗨約翰約翰,不,我相信沒有。我相信這是唯一/最好的方式。有人可能會糾正我,但希望我會遵循套件。儘管如此,我仍然會使用HiddenFor,因爲您可以在不使用字符串的情況下從ViewModel中取回數據。 – hutchonoid