مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

laleh_456

عضویت از 1395/10/06

ارور در زمان ساخت سایت مپ داینامیک

  • یکشنبه 21 خرداد 1396
  • 07:49
تشکر میکنم

سلام دوستان

من از اموزش این لینک برای ساخت سایت مپ استفاده کردم.اما برنامه ارور داره ممنون میشم راهنمایی بفرمایید.

لینک مقالهhttps://barnamenevisan.org/Articles/Article5687.html

ارور:

Error 1 Extension method must be defined in a non-generic static class 

پاسخ های این پرسش

تعداد پاسخ ها : 8 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 21 خرداد 1396
  • 10:04

متن ارور به Extension mehtod اشاره میکنه که استفاده کردید

من مقاله را دیدم در اون از extension استفاده نشده بود

کاربر سایت

laleh_456

عضویت از 1395/10/06

  • یکشنبه 21 خرداد 1396
  • 10:54

ببخشید کجای کار من اشتباه هست متوجه نمیشم؟ممنون میشم بگید.

من یه فولدر ساختم بنام sitemap که در اون سه تا کلاس ساختم بنامهای :

sitemapfrequency.cs

sitemapnode.cs

UrlHelperExtensions​.cs

بعد در کنترلر home کدهای زیر را قرار دادم:

     [Route("sitemap.xml")]
            public ActionResult SitemapXml()
            {
                var sitemapNodes = GetSitemapNodes(this.Url);
                string xml = GetSitemapDocument(sitemapNodes);
                return this.Content(xml, ContentType.Xml, Encoding.UTF8);
            }
       
        public string GetSitemapDocument(IEnumerable<SitemapNode> sitemapNodes)
        {
            XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
            XElement root = new XElement(xmlns + "urlset");

            foreach (SitemapNode sitemapNode in sitemapNodes)
            {
                XElement urlElement = new XElement(
                    xmlns + "url",
                    new XElement(xmlns + "loc", Uri.EscapeUriString(sitemapNode.Url)),
                    sitemapNode.LastModified == null ? null : new XElement(
                        xmlns + "lastmod",
                        sitemapNode.LastModified.Value.ToLocalTime().ToString("yyyy-MM-ddTHH:mm:sszzz")),
                    sitemapNode.Frequency == null ? null : new XElement(
                        xmlns + "changefreq",
                        sitemapNode.Frequency.Value.ToString().ToLowerInvariant()),
                    sitemapNode.Priority == null ? null : new XElement(
                        xmlns + "priority",
                        sitemapNode.Priority.Value.ToString("F1", CultureInfo.InvariantCulture)));
                root.Add(urlElement);
            }

            XDocument document = new XDocument(root);
            return document.ToString();
        }
        public IReadOnlyCollection<SitemapNode> GetSitemapNodes(UrlHelper urlHelper)
        {
            List<SitemapNode> nodes = new List<SitemapNode>();

            nodes.Add(
                new SitemapNode()
                {
                    Url = urlHelper.AbsoluteRouteUrl("HomeGetIndex"),
                    Priority = 1
                });
            nodes.Add(
               new SitemapNode()
               {
                   Url = urlHelper.AbsoluteRouteUrl("HomeGetAbout"),
                   Priority = 0.9
               });
            nodes.Add(
               new SitemapNode()
               {
                   Url = urlHelper.AbsoluteRouteUrl("HomeGetContact"),
                   Priority = 0.9
               });

            foreach (int productId in productRepository.GetProductIds())
            {
                nodes.Add(
                   new SitemapNode()
                   {
                       Url = urlHelper.AbsoluteRouteUrl("ProductGetProduct", new { id = productId }),
                       Frequency = SitemapFrequency.Weekly,
                       Priority = 0.8
                   });
            }

            return nodes;
        }

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 21 خرداد 1396
  • 11:03

کد را Trace کنید ببینید در کدام خط این ارور رو میده

کاربر سایت

laleh_456

عضویت از 1395/10/06

  • یکشنبه 21 خرداد 1396
  • 11:09

در کلاس UrlHelperExtensions:

به خط  public class UrlHelperExtensions

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 21 خرداد 1396
  • 12:00

این کلاس رو خودتون ساختید ؟

در نمونه نبود

کاربر سایت

laleh_456

عضویت از 1395/10/06

  • یکشنبه 21 خرداد 1396
  • 12:12

در قسمت ایجاد مجموعه ای از SiteMapNode :​

public IReadOnlyCollection<SitemapNode> GetSitemapNodes(UrlHelper urlHelper)
{
    List<SitemapNode> nodes = new List<SitemapNode>();
  
    nodes.Add(
        new SitemapNode()
        {
            Url = urlHelper.AbsoluteRouteUrl("HomeGetIndex"),
            Priority = 1
        });
    nodes.Add(
       new SitemapNode()
       {
           Url = urlHelper.AbsoluteRouteUrl("HomeGetAbout"),
           Priority = 0.9
       });
    nodes.Add(
       new SitemapNode()
       {
           Url = urlHelper.AbsoluteRouteUrl("HomeGetContact"),
           Priority = 0.9
       });
  
    foreach (int productId in productRepository.GetProductIds())
    {
        nodes.Add(
           new SitemapNode()
           {
               Url = urlHelper.AbsoluteRouteUrl("ProductGetProduct", new { id = productId }),
               Frequency = SitemapFrequency.Weekly,
               Priority = 0.8
           });
    }
  
    return nodes;
}
  
public class UrlHelperExtensions
{
    public static string AbsoluteRouteUrl(
        this UrlHelper urlHelper,
        string routeName,
        object routeValues = null)
    {
        string scheme = urlHelper.RequestContext.HttpContext.Request.Url.Scheme;
        return urlHelper.RouteUrl(routeName, routeValues, scheme);
    }
}

​من تصور کردم که getsitemapnode رو باید در کنترلر قرار بدم و برای UrlHelperExtensions یک کلاس در فولدر sitemap بسازم.که ظاهرا اشتباه بوده.ممنون میشم توضیح بدین باید چیکار کنم؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 21 خرداد 1396
  • 12:24

کلاس public class UrlHelperExtensions را به شکل زیر تغییر دهید

public static class UrlHelperExtensions
{
    public static string AbsoluteRouteUrl(
        this UrlHelper urlHelper,
        string routeName,
        object routeValues = null)
    {
        string scheme = urlHelper.RequestContext.HttpContext.Request.Url.Scheme;
        return urlHelper.RouteUrl(routeName, routeValues, scheme);
    }
}

کاربر سایت

laleh_456

عضویت از 1395/10/06

  • یکشنبه 21 خرداد 1396
  • 13:22

ممنون

الان ارور زیر رو دارم.کل پکیجها رو اپدیت کردم اما همین پکیج نمیتونه اپدیت بشه و ارور میده؟

Error 1 The type or namespace name 'RoutePrefixAttribute' could not be found (are you missing a using directive or an assembly reference?) 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)