मैं एक सर्वोत्तम अभ्यास समाधान की तलाश में हूं जिसका उद्देश्य एएसपी.NET एप्लिकेशन में हार्ड-कोड किए गए यूआरएल की मात्रा को कम करना है।एएसपी.नेट - हार्डकोडिंग पथ से बचें
उदाहरण के लिए, जब उत्पाद विवरण स्क्रीन देखते हैं, इन विवरणों पर एक संपादन करते हैं, और फिर परिवर्तन सबमिट करते हैं, तो उपयोगकर्ता को उत्पाद प्रविष्टि स्क्रीन पर रीडायरेक्ट किया जाता है। इसके बजाय निम्नलिखित कोडिंग के:
Pages.GotoProductList("books");
जहां Pages
आम आधार वर्ग का एक सदस्य है:
Response.Redirect("~/products/list.aspx?category=books");
मैं जगह में एक समाधान है कि मुझे कुछ इस तरह करने की अनुमति देता है करना चाहते हैं।
मैं बस यहां थूक रहा हूं, और किसी अन्य तरीके से सुनना अच्छा लगेगा जिसमें किसी ने भी अपना एप्लिकेशन रीडायरेक्ट प्रबंधित किया है।
संपादित
मैं निम्नलिखित समाधान बना दी: मैं पहले से ही एक आम आधार वर्ग था, जो करने के लिए मैं एक पेज enum (धन्यवाद मार्क) जोड़ा, प्रत्येक आइटम पृष्ठ के URL से युक्त एक System.ComponentModel.DescriptionAttribute
विशेषता होने के साथ :
public enum Pages
{
[Description("~/secure/default.aspx")]
Landing,
[Description("~/secure/modelling/default.aspx")]
ModellingHome,
[Description("~/secure/reports/default.aspx")]
ReportsHome,
[Description("~/error.aspx")]
Error
}
फिर मैंने विभिन्न परिदृश्यों को संभालने के लिए कुछ अधिभारित विधियां बनाईं। मैं के माध्यम से यह Description
विशेषता है पृष्ठ का URL प्राप्त करने के लिए प्रतिबिंब का इस्तेमाल किया है, और मैं (भी एक प्रश्न-स्ट्रिंग पैरामीटर के रूप में प्रत्येक संपत्ति जोड़ने के लिए प्रतिबिंब का उपयोग) एक गुमनाम प्रकार के रूप में क्वेरी स्ट्रिंग पैरामीटर भेजने:
private string GetEnumDescription(Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
return attr.Description;
}
}
return null;
}
protected string GetPageUrl(Enums.Pages target, object variables)
{
var sb = new StringBuilder();
sb.Append(UrlHelper.ResolveUrl(Helper.GetEnumDescription(target)));
if (variables != null)
{
sb.Append("?");
var properties = (variables.GetType()).GetProperties();
foreach (var property in properties)
sb.Append(string.Format("{0}={1}&", property.Name, property.GetValue(variables, null)));
}
return sb.ToString();
}
protected void GotoPage(Enums.Pages target, object variables, bool useTransfer)
{
if(useTransfer)
HttpContext.Current.Server.Transfer(GetPageUrl(target, variables));
else
HttpContext.Current.Response.Redirect(GetPageUrl(target, variables));
}
एक सामान्य कॉल तब ऐसा दिखाई देगा:
GotoPage(Enums.Pages.Landing, new {id = 12, category = "books"});
टिप्पणियां?
मैंने इस तरह कुछ ऐसा करने के लिए समाप्त किया (ऊपर संपादित देखें), और इसे स्वीकार किए जाने के रूप में चिह्नित किया जाएगा क्योंकि मैंने पेज एनम विचार का उपयोग किया था। धन्यवाद मार्क। – staterium