2016-08-12 36 views
-4

我的問題是,我正在研究ASP .NET MVC Ajax項目。在我將集合傳遞給視圖並使用foreach循環迭代此集合的情況下,我想在同一視圖上使用@Ajax.ActionLink()添加新記錄,表單將以使用jQuery UI的對話框的形式顯示。但我不知道該怎麼做,因爲在IEnumerable形式的模型對象,我無法通過模型屬性@Html.EditorFor()方法,錯誤的是:如何將IEnumerable集合轉換爲使用MVC .NET的單個對象

CS1061:「IEnumerable的<國家>」不不包含「國家或地區名稱」和沒有擴展方法「國家或地區名稱」接受類型的第一個參數定義「的IEnumerable <國家>」可以找到(是否缺少using指令或程序集引用?)

查看.cshtml代碼

@model IEnumerable<UBSAjax.Models.Country> 
.... 
<style> 
    .deleteButton { 
     display:none !important; 
    } 
</style> 
<h2>Counties</h2> 
<table id="myTable"> 
    <thead> 
     <tr> 
      <th>@Html.DisplayNameFor(model => model.CountryName)</th> 
      <th>@Html.DisplayNameFor(model => model.CountryCode)</th> 
      <th>Actions</th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var item in Model) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => item.CountryName)</td> 
       <td>@Html.DisplayFor(modelItem => item.CountryCode)</td> 
       <td class="deleteButton"> 
        @Html.ActionLink("Edit", "Edit", new { id = item.CountryId }) | 
        @Html.ActionLink("Details", "Details", new { id = item.CountryId }) | 
        @Html.ActionLink("Delete", "Delete", new { id = item.CountryId }) 
       </td> 
      </tr> 
     } 
    </tbody> 
</table> 

<!--Ajax Assets--> 
@{ 
    AjaxOptions options = new AjaxOptions(); 
    options.InsertionMode = InsertionMode.InsertAfter; 
    options.HttpMethod = "GET"; 
    //options.LoadingElementId = "imgloader"; 
    //options.LoadingElementDuration = 1000; 
    options.Confirm = "Do you want to get form ?????"; 
    options.OnFailure = "failureFunc"; 
    options.OnSuccess = "successFunc"; 
    //options.OnBegin = "beginFunc"; 
    //options.OnComplete = "completeFunc"; 
    options.UpdateTargetId = "CountryContentId"; 
} 

<div id="dialog" title="Login Form"> 
    @using (Ajax.BeginForm("Create", "Country", options)) 
    { 
     <div class="form-group"> 
      @Html.EditorFor(model => model.CountryName, new { @class = "form-control", @placeholder = "Enter Country Name" }) 
      @Html.ValidationMessageFor(model => model.CountryName, "", new { @class = "text-danger" }) 
     </div> 
     <div class="form-group"> 
      @Html.EditorFor(model => model.CountryCode, new { @class = "form-control", @placeholder = "Enter Country Code" }) 
      @Html.ValidationMessageFor(model => model.CountryCode, "", new { @class = "text-danger" }) 
     </div> 
     <div class="form-group"> 
      <input type="submit" value="Add Country" class="btn btn-success" /> 
     </div> 
    } 
</div> 

@model IEnumerable<UBSAjax.Models.Country>是一個集合,但我想在相同的視圖中創建窗體,但上面的錯誤正在發生。

+0

的代碼示例,在這裏開始好辦法。 –

+0

顯示生成此錯誤的代碼。編輯您的問題並添加該代碼。 – user3185569

+0

@Janis我已添加我的代碼,請幫助 – Savvy

回答

0

使用視圖模式取而代之,創建一個保存國家的兩個集合和一個單一的新的國家的數據,從那裏的看法分爲顯示和編輯模板分別

+0

我只想投集var obj =(列表),就像那樣,因爲我正在返回收集視圖,並在視圖中,我想將其轉換爲單個對象 – Savvy

+0

如何創建視圖模型,這將持有國家集合和一個新的國家數據,請給我任何示例謝謝 – Savvy

+0

它不方便鍵入代碼,基本上viewmodel只是一個像你的模型一樣的poco類,除非你不在上下文中添加它的dbset,使一個名爲countryvm或你喜歡的東西,並使它擁有IEnumerable 國家的財產,另一個國家擁有一個國家數據,將其命名爲NewCountry或從此處將您當前視圖的模型更改爲您創建的新vm,將整個表格移動到顯示中國家列表模板(谷歌關於如何創建自定義編輯器和顯示模板)和使用編輯器的表單。最後更新您的控制器使用虛擬代替 – Andrias

相關問題