2010-08-01 17 views
80

Yeni jilet görüntüleme motorunu kullanarak kısmi bir işlem yapmanın en iyi yolunun ne olduğunu merak ediyorum. Biliyorum bu kullanıcı denetimi işlemek için RenderPage kullanıyorum Şu an zamanınJiletli görünüm motoru - Kısmi Görünümleri nasıl ekleyebilirim

tamamen bitmiş değildi şeyi anlamak:

@RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model) 

sayfa RenderPage üçüyle bir düzen (ana) sayfasını kullanır çağıran Tanımlanan bölümler: TitleContent, HeadContent ve Maincontent. Yerel denetimimi bu sayfadan oluşturmaya çalıştığımda, bu bölümlerin de gerekli olduğu anlaşılıyor - bunlar yalnızca arama sayfasında ve mevcut durumda olmalıdır. Kısmi görünümümdeki bölümleri dahil edip etmediğime bakmadan aşağıdaki iletiyi alıyorum (açıkçası bu bölümleri eklemek istemiyorum ama ilginç bir hata ayıklama noktası gibi görünüyordu).

sonraki bölümlerde

tanımlanan olmuştur ama düzen sayfasını hale edilmemiştir '~/Görüntüleme/Paylaşılan/LocaleUserControl.cshtml': TitleContent; HeadContent; aşağıdaki gibi mainContent

Benim kısmi görünümü (aşağıdaki link uyarlanmıştır) olduğu:

@inherits System.Web.Mvc.WebViewPage<LocaleBaseModel> 
@using System.Web.UI; 

<p> 
    @Html.LabelFor(model => Model.CountryName) 
    <br /> 
    @Html.DropDownListFor(model => Model.CountryName,null, string.Empty, new { @class = "text", accesskey="u"}) 
</p> 
<p> 
    @Html.LabelFor(model => Model.StateProvince) 
    <br /> 
    @Html.DropDownListFor(model => Model.StateProvince, null, string.Empty, new { @class = "text", accesskey="t" }) 
</p> 


<script type="text/javascript"> 
    $(function() { 
     var countries = $("#CountryName"); 
     var statesprovinces = $("#StateProvince"); 
     countries.change(function() { 
      statesprovinces.find('option').remove(); 
      var url = '@Url.Action("GetStatesProvinces", "Base")'; 
      $.getJSON(url, { countryId: countries.val() }, function (data) { 
       $(data).each(function() { 
        $("<option value=" + this.ID + ">" + this.Name + "</option>").appendTo(statesprovinces); 
       }); 
      }); 
     }); 
    }); 
</script> 

cevap

117

Sen kısmi görünüyor çok bir editör şablon gibi böyle (senin kısmi elbette varsayarak olarak içerebilir, böylece

: bu sadece böyle değilse

@Html.EditorFor(model => model.SomePropertyOfTypeLocaleBaseModel) 

Veya:) ~/views/controllername/EditorTemplates alt klasöründe yerleştirilir Kodu tekrarlamadan istiyor ve görünümünüzü modelinde, bana sadece istatistik göstermeye istiyoruz beğenmezseniz

@Html.Partial("nameOfPartial", Model) 
+0

Geri bildiriminiz için teşekkür ederiz ... Html.EditorFor bu örnekte iyi bir fikir olabilir - ama daha karmaşık örnekler için durum böyle olmadığı için alternatifleri görmek isterim - kesinlikle çalışırım yakında tekrar bu içine. Html.Partial ViewPage veya ViewUserControl türetmesi gerektiğinden çalışmaz, jilet kısmi WebViewPage'den gelir ... –

+4

Html.Partial mükemmel çalışır. Razor görünüm motorunu kullanarak Visual Studio'da yeni bir ASP.NET MVC 3 projesi başlatın, 'Paylaşılan' klasöründeki '_Layout.cshtml' dosyasını açın ve 'WebViewPage'den türetilen' _LogOnPartial.cshtml' dosyasının nasıl eklendiğini kontrol edin. bitti (Html.Partial kullanarak).Yani hayır, kısmi 'html.Partial' çalışmak için' ViewPage' veya 'ViewUserControl' türetmek gerekmez. –

+1

Hmmm, doğru gibi gözüküyor. Ayrıca, bazı hata ayıklama yaptığım anlaşılıyor. Teşekkürler! –

0

, sadece bu kadar gibi verileri almak isteyen modellerinde geçebileceği:

public class GameViewModel 
{ 
    public virtual Ship Ship { get; set; } 
    public virtual GamePlayer GamePlayer { get; set; }  
} 

Ardından örnek, denetleyicinizdeki sadece, ilgili modellerde sorgularınızı çalıştırmak görünümü modeline onları geçmek ve geri:

GameViewModel PlayerStats = new GameViewModel(); 

GamePlayer currentPlayer = (from c in db.GamePlayer [more queries]).FirstOrDefault(); 

[denetlemek için kod eğer sonuç]

//pass current player into custom view model 
PlayerStats.GamePlayer = currentPlayer; 

Benzeri tablolardan istatistiklerini görüntülemek istiyorsanız bunu yapmalısınız ve diğer kişilerin yukarıda bahsi geçen güvenlik nedenlerinden ötürü CRUD sürecinin başka bir parçası olmayacak.

İlgili konular