Parametreler ASP.NET MVC'de kısmi bir görünüme nasıl geçirilir?


93

Bu kısmi görüşe sahip olduğumu varsayalım:

Your name is <strong>@firstName @lastName</strong>

şunun gibi bir çocuğun yalnızca eylemiyle erişilebilir olan:

[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{

}

Ve bu kısmi görünümü başka bir görünümün içinde kullanmak istiyorum:

@Html.RenderPartial("FullName")

Başka bir deyişle, firstName ve lastName'i görünümden kısmi görünüme geçirebilmek istiyorum. Bunu nasıl yapmalıyım?


Yanıtlar:


78

Bu aşırı yüklemeyi kullanın ( RenderPartialExtensions.RenderPartialMSDN'de ):

public static void RenderPartial(
    this HtmlHelper htmlHelper,
    string partialViewName,
    Object model
)

yani:

@{Html.RenderPartial(
    "FullName",
    new { firstName = model.FirstName, lastName = model.LastName});
}

1
Peki, denedim ama 'System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)' için en iyi aşırı yüklenmiş yöntem eşleşmesini alıyorum bazı geçersiz bağımsız değişkenler hatası var. Denetleyici yöntemini nasıl uygulamalıyım? Giriş parametreleri olmalı mı?
Saeed Neamati

19
Öyleyse böyle bir parametreyi geçtiniz, kısmi görünümde ona nasıl erişirsiniz?
Burjua

9
Ayrıca braketlere de ihtiyacınız yok. @Html.Partial()aynı @{Html.RenderPartial();}ama çok daha güzel. Aynı aşırı yüklemelere de sahipler.
smdrager

7
Nesneye nasıl erişirsiniz? Model.firstNameve benzerleri bir istisna object doesn't have a 'firstName' property
atıyor

4
@ ashes999 ViewData yoluyla erişebilirsiniz ... ancak kullanımınıza özgü bir model oluşturarak işleri düzenli tutmaya yardımcı olun. Bir kez kullanın ve bazıları bunu bir savurganlık olarak düşünebilir, ancak bundan daha fazla kullanın ve bu hiç akıllıca değildir.
Ted

85

ViewData'yı kullanmak istiyorsanız, bunu yapmanın başka bir yolu:

@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })

Ve aktarılan değerleri almak için:

@{
    string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}

Teşekkürler, cevabınız bunun için bir model oluşturmadan hile yaptı.
alvarodms

Tüm örnekler arasında benim için tamamen işe yarayan tek örnek bu. teşekkürler
BrianLegg

Aradığım buydu, model yok. teşekkür ederim :)
Anupam Roy

Mükemmel cevap - ama bunun yerine Html.Partial MVC 4 kullanımı Html.RenderPartial ile
Graham Laight

25

Bir görünüm modeli oluşturmanız gerekiyor. Bunun gibi bir şey yapmalı ...

public class FullNameViewModel
{
     public string FirstName { get; set; }
     public string LastName { get; set; }

     public FullNameViewModel() { } 

     public FullNameViewModel(string firstName, string lastName)
     {
          this.FirstName = firstName;
          this.LastName = lastName;
     }

}

sonra eylem sonucunuzdan modeli geç

return View("FullName", new FullNameViewModel("John", "Doe"));

ve erişmek mümkün olacak @Model.FirstNameve @Model.LastNamebuna göre.


14

Html.RenderPartial çevresine şu şekilde {} eklediğinizden emin olun:

@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}

değil

@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});

1
Kısmi Görünümünüzün tanımı nasıl görünüyor? @Model beyanı nedir? Anonim ...
Elisabeth

evet eklediğinizden emin olun { }, bu makaleyi bulana kadar zaman harcadım
Shaiju T

5

Aşağıdaki dotnet 1.0.1'de benim için çalışıyor :

./ourView.cshtml

@Html.Partial(
  "_ourPartial.cshtml",
  new ViewDataDictionary(this.Vi‌​ewData) {
    {
      "hi", "hello" 
    } 
  }
);

./_ourPartial.cshtml

<h1>@this.ViewData["hi"]</h1>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.