2012-10-25 19 views
6

ile birden çok parametre (bazı karmaşık nesneler) nasıl iletilir. MVC in .net 4.0 ile çalışıyorum. Temel bir Html.ActionLink'im var ve denetleyiciye/eyleme birden çok parametre iletmek istiyorum.Html.ActionLink

Her ActionScript hata ayıkladığımda parametrelerimden yalnızca bir tanesi gelir ve diğeri null (hangisinin ilk olduğuna bağlı olarak). Artık, “Lig” nesnesinin gelmesini sağlayabildiğimden beri karmaşık nesneleri geçebileceğimi biliyorum. Ancak, parametrelerimden yalnızca birisinin neden herhangi bir zamanda yaptığını bilmiyorum.

View

Kodu: (ViewBag hakkında bana rahatsız etmeyin ben popüler olmadığını biliyorum Ayrıca Lig karmaşık bir nesnedir..) Kontrolör içinde

@Html.ActionLink("Sort By WeeK", "Sort", "Schedule", 
       new { league = ViewBag.League, sortType = "Week" }, null) 

Kodu: (burada hiçbir sürpriz)

public ActionResult Sort(League league, string sortType) 
{ 
    //Do some stuff here 
    return View("Schedule"); 
} 

Cevabın, yönlendirme etrafında döneceğini tahmin ediyorum. Bu beni 2. soruma getirir. Sürekli olarak yeni maproutes eklemeden çalışmak için bu tip ActionLink'i (Action/Controller/Kompleks ve Basit nesnelerin toplanması) nasıl alabilirim. Ekleyebileceğim jenerik/joker bir RouteMap var mı? Böylece global.asax'a sürekli olarak anatomik olarak aynı rota haritalarını eklemem gerekmiyor. Ya da bir eyleme geçmek istediğim nesnelerin türünde bir miktar esneklik istiyorum, böylece kesin imzayı önceden tanımlayamıyorum.

Bu konuyla ilgili birçok gönderi gördüm, ancak bunların hiçbiri sorularımı yanıtladı.

+0

garip. Denetleyicinizin eyleminde FormCollection'ı deneyin ve birden fazla anahtar döndürüp döndürmediğini görün. En kötü durum senaryosu bir form haline getirebilir ve gizli HTML'yi gönderebilirsiniz. – Ammar

+0

"Hangisi önce" derken, ilk olarak yöntem imzasında mı yoksa ilk önce bağlantının URL'sinde mi demek istiyorsunuz? Oluşturulan URL neye benziyor? –

cevap

4

Boş parametresi yüzünden kafam karışmış olabileceğini düşünüyorum. aynen böyle, nesneden değişkenler üzerinde nesne "açmak", kendisi sorun çözüldü i`m

@Html.ActionLink("Sort By WeeK", actionName:"Sort", controllerName: "Schedule", routeValues: new { league = ViewBag.League, sortType = "Week" }, htmlAttributes:null) 
+0

Geri bildirim için teşekkürler. Bunu test edip sana döneceğim. Uygulamanın kapsamı genişledikçe, Ligi nesnesi denetleyicinin kamuya açık bir özelliği haline geldi, dolayısıyla artık bunu geçmek için gerekli olmadı. Bir dahaki sefere birden fazla parametrede geçmek ve sonuçları yayınlamak için öneriyi deneyeceğim İşte. Mutlu cumalar. – ArdAtak

+0

Geç cevap için özür dilerim, ancak bunu daha yeni gördüm ve hala bir onay aldığımı düşündüm. Öneri işe yaradı. Teşekkürler. – ArdAtak

0

Im birçok şekilde çalışıyor ama kimse sonunda, bana yardım yok: Bunu deneyin

@{ var sendObject = (MyObject) ViewData["SendObject"]; } 
... 
@Html.ActionLink("Description", "MyActionName", "MyController", new { sendObject.var1, sendObject.var2, sendObjec.var3, sortType = "Week" }, new { @style = "color: white" }) 

Denetleyici:

public ActionResult MyActionName(MyObject sendObject, string sortType) 
{ 
... 
} 

Çerçeve kendisi bağlamak wil senin nesne SendObject

0

Sadece bunu:

VIEW: 
@Html.ActionLink("Link text", "Action name", "Controller name", 
         new { paramName1 = @modelDataItem.value, paramName2 = @modelDataItem.value}, null) 

CONTROLLER: 
public ActionResult ActionName(string paramName1 , string paramName2) 

Nb: O eylem bağlantısını kullanılan kontrolör eylemlere parametre adları aynı olduğundan emin olun. Değerler eylem parametrelerine iletilmezse, görünüm modellerinin aradığınız değeri içerdiğini kontrol edin. Belki de asla manzaraya gönderilmedi.

İlgili konular