2012-11-23 9 views
5

के लिए मैं 3 के लिएMVC गतिशील routeValues ​​ActionLinks

एक है एक समग्र कुंजी है, इसलिए इसे से जोड़ने के लिए, मार्ग मान होगा ActionLink उपयोग करने के लिए मेरी ViewModel ए के लिए एन संपादन स्क्रीन से जोड़ने के लिए एक की जरूरत है pramaters, इस तरह:

<%: Html.ActionLink("EDIT", "Action", "Controller", 
    new { area = "Admin", Id1= 1, Id2= 2, Id3= 3 })%> 

जैसा कि आप देख सकते हैं, मार्ग मूल्यों में ऐसे आईडी होते हैं जो नियंत्रक क्रिया स्वीकार करेंगे।

मैं मार्ग मूल्यों इस तरह, एक सहायक समारोह से उत्पन्न करने में सक्षम होना चाहता हूँ:

public static Object GetRouteValuesForA(A objectA) 
    { 
     return new 
     { 
      long Id1= objectA.Id1, 
      long Id2= objectA.Id2, 
      long Id3= objectA.Id3 
     }; 
    } 

और फिर ActionLink सहायक में इसका इस्तेमाल करते हैं, लेकिन मैं कैसे करने के लिए है कि परिणाम पारित करने के लिए पता नहीं है ActionHelper

objectA = new A(){Id1= objectA.Id1,Id2= objectA.Id2,Id3= objectA.Id3}; 
.... 
<%: Html.ActionLink("EDIT", "Action", "Controller", 
    new { area = "Admin", GetRouteValuesForA(objectA) })%> 

लेकिन वह 3 गुण

की एक सूची के बजाय कि अज्ञात प्रकार मैं नीचे दिए गए लिंक है कि विलय देखा स्वीकार करने के लिए नियंत्रक कार्रवाई की आवश्यकता होगी गुमनाम प्रकार है, लेकिन क्या ऐसा करने का कोई और तरीका है? Merging anonymous types

+0

क्या आप मूल्यों को अपने व्यूमोडेल के गुणों के रूप में नहीं जोड़ सकते हैं? –

+0

वे हैं, लेकिन मैं सिर्फ एक परिवर्तन की परिभाषा के मामले में मार्ग मान उत्पन्न करने के लिए फ़ंक्शन का उपयोग करना चाहता हूं, जैसे कि मुझे समग्र कुंजी बनाने वाले आईडी जोड़ने या निकालने की आवश्यकता है। इस तरह, मुझे केवल एक ही स्थान पर पैराम को बदलना होगा – getit

+0

मेरा उत्तर देखें :) –

उत्तर

11

इस तरह कुछ कैसे?

मॉडल:

public class AViewModel 
{ 

    public string Id1 { get; set; } 
    public string Id2 { get; set; } 
    public string Id3 { get; set; } 

    public RouteValueDictionary GetRouteValues() 
    { 
     return new RouteValueDictionary(new { 
      Id1 = !String.IsNullOrEmpty(Id1) ? Id1 : String.Empty, 
      Id2 = !String.IsNullOrEmpty(Id2) ? Id2 : String.Empty, 
      Id3 = !String.IsNullOrEmpty(Id3) ? Id3 : String.Empty 
     }); 
    } 
} 

दृश्य:

<%: Html.ActionLink("EDIT", "Action", "Controller", Model.GetRouteValues())%> 

अब आप के रूप में आप की तरह और भी है तो केवल उन्हें एक स्थान पर बदलना होगा उन्हें रूप में ज्यादा का पुन: उपयोग कर सकते हैं।

+0

बढ़िया, धन्यवाद – getit