# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET MVC > سوال: بدست آوردن id از آدرسی که id در آن نیست

## سعید کشاورز

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

site.com/Product/YourProductName

آیا میشه از طریق این آدرس آیدی اون محصول رو بدست آورد؟ نکته ای که وجود داره اینه نمی خوام کوئری بزنم از طریق productName .

اصلا همچین چیزی امکان پذیر هست؟ یعنی آیدی توی آدرس نباشه ولی بشه به دست آورد اون رو

----------


## parvizwpf

خودتون چی فکر میکنید؟ مگر اینکه آیدی هم در آدرس وجود داشته باشه . وقتی اثری از آیدی نیست چگونه میشه؟
یا مگر اینکه با یک کوئری کل آیدی ها رو جایی نگه داشته باشید که در وب کار درستی نیست

----------


## mr.sirwan

احتمال میدم این بحث رو بخاطر سئو دارین انجام میدین، یعنی دارین به جای ایدی محصول از نامش استفاده میکنین، به نظرم زیاد خودتونو درگیر سئو نکنین، نمیشه یه وبسایتی ساخت که از هر نظر سئوی عالی داشته باشه، نمیشه بعضی جاها پرفورمنس برنامه رو فقط به خاطر سئو زیر سوال برد، مثلا همین روش شما، باید یه کوئری بر اساس نام محصول بزنین، حالا ممکنه نام محصول یونیک نباشه و چندین رکورد رو برگردونه حالا چطوری بفهمین کدوم رکورد موردنظر شماست و ..... یا مثلا دارین یه رکوردی رو ویرایش میکنین که به ایدی محصول نیازه، شما باید کوئری بزنید که ایدی محصول رو بدست بیارید بعد عمل مقدار دهی ایدی رو انجام بدین، یعنی یک تراکنش اضافی و....

----------


## سعید کشاورز

> خودتون چی فکر میکنید؟ مگر اینکه آیدی هم در آدرس وجود داشته باشه . وقتی اثری از آیدی نیست چگونه میشه؟
> یا مگر اینکه با یک کوئری کل آیدی ها رو جایی نگه داشته باشید که در وب کار درستی نیست


از اونجایی که توی برنامه نویسی کار نشد نداره گفتم تاپیک بزنم شاید این کار قابل انجام باشه ( حالا به هر نحوی)




> احتمال میدم این بحث رو بخاطر سئو دارین انجام میدین، یعنی دارین به جای ایدی محصول از نامش استفاده میکنین، به نظرم زیاد خودتونو درگیر سئو نکنین، نمیشه یه وبسایتی ساخت که از هر نظر سئوی عالی داشته باشه، نمیشه بعضی جاها پرفورمنس برنامه رو فقط به خاطر سئو زیر سوال برد، مثلا همین روش شما، باید یه کوئری بر اساس نام محصول بزنین، حالا ممکنه نام محصول یونیک نباشه و چندین رکورد رو برگردونه حالا چطوری بفهمین کدوم رکورد موردنظر شماست و ..... یا مثلا دارین یه رکوردی رو ویرایش میکنین که به ایدی محصول نیازه، شما باید کوئری بزنید که ایدی محصول رو بدست بیارید بعد عمل مقدار دهی ایدی رو انجام بدین، یعنی یک تراکنش اضافی و....


دقیقا درست حدس زدین.
الان من توی CMS که نوشتم یه قسمت دارم که که کاربر URL SEO یا به اصطلاح slugUrl رو وارد میکنه.
حالا یه سری از کسایی که کار دیتا وارد کردن توی سایت رو وارد میکنند خیلی بی دقتی به خرج میدن و آدرس سئو رو اشتباه وارد میکنن از نظر املایی و هر چیزه دیگه ای..وقتی گوگل اون صفحه رو ایندکس میکنه و اون slugURL اگه ویرایش بشه خطای 404 میده.
حالا من اومدم آی دی هم توی آدرس اضافه کردم که Find شدن از طریق Id انجام بشه.
ولی آدرسام یه مقداری طولانی تر شد.
واسه همین خواستم تاپیک بزنم گفتم شاید راهی وجود داشته باشه.

----------


## parvizwpf

> از اونجایی که توی برنامه نویسی کار نشد نداره گفتم تاپیک بزنم شاید این کار قابل انجام باشه ( حالا به هر نحوی)


بر منکرش ...... کار بسیار خوبی هم هست. تبادل تفکر هم میشه . سپاس
آخه میدونی سوالتون حالت فلسفی داره . داره از عدم صحبت میکنه پس چیزی که نیست پس نیست که نیست .  :متفکر:

----------


## سعید کشاورز

> بر منکرش ...... کار بسیار خوبی هم هست. تبادل تفکر هم میشه . سپاس
> آخه میدونی سوالتون حالت فلسفی داره . داره از عدم صحبت میکنه پس چیزی که نیست پس نیست که نیست .


شما این لینک رو ببین

آدرسش این شکلیه
https://www.web24.ir/go/1/519.aspx

وقتی کلیک میکنی آدرسش عوض میشه..

----------


## parvizwpf

خب این نشون میده اولش کوئری میخوره بعد بصورت این url برمیگردونه . من منظورم آی دی ای که نیست کلا چجوری میخوای بفهمی چه آیدی ای بوده

----------


## Moien Tajik

انجام اینکار به این شکل زیاد درست نیست ، چون اگر صرفا قرار باشه فقط با نام محصول URL ایجاد بشه ، ممکنه 2 محصول همنام داشته باشیم.
در اینصورت موقع جستجو فقط محصول اول نمایش داده میشه.

یک روش هست که به آخر نام محصول ID اضافه میکنن و بر اساس اون جستجو میکنن ، نمونه این روش :
https://www.danylkoweb.com/Blog/aspn...your-routes-90

----------


## nunegandom

کافیه وقتی آدرس رو تغییر داد یه redirect 301 بسازید
من یک نام محصول دارم + یک url که unique هست
url رو هم موقع ورود محصول بعدی سمس سرور از طریق Remote چک میکنم

----------


## hakim22

> اصلا همچین چیزی امکان پذیر هست؟ یعنی آیدی توی آدرس نباشه ولی بشه به دست آورد اون رو


بله میشه و خیلی هم ساده هست . کافیه در مرورگر از تب Network استفاده کنید تا تمام تراکنشهای خودتون با سرور رو ببینید. همه ی اطلاعات که به صورت POST به سرور ارسال میشه هم درون Form Data در HTTP ذخیره میشه و برای کاربری که داره از سایت استفاده میکنه قابل مشاهده هست.

----------


## سعید کشاورز

> بله میشه و خیلی هم ساده هست . کافیه در مرورگر از تب Network استفاده کنید تا تمام تراکنشهای خودتون با سرور رو ببینید. همه ی اطلاعات که به صورت POST به سرور ارسال میشه هم درون Form Data در HTTP ذخیره میشه و برای کاربری که داره از سایت استفاده میکنه قابل مشاهده هست.


این موردی که گفتین یعنی باید دکمه های جزئیات محصول داخل تگ فرم باشه و اون دکمه باتن Submit باشه؟  :افسرده: 
فکر کنم بد متوجه شدم.میشه یه مثال کوچیک بزنید؟

----------


## nunegandom

با سلام مجدد
راه حل جدید من رفت اینکه از id استفاده کنم توی url و بعد از دریافت محصول از طریق id به آدرس صفحه slag هم اضافه کنم
به دلیل اینکه محصولات این سایتی که روش کار میکنم قراره زیاد بشه و نمیخوام پرفورمنس مشکل دار بشه برای همین مستقیم از link استفاده نمیکنم
چیزی که جناب حکیم گفتن رو تا حالا ندیدم(در هیچ سیستمی)
لینک نمونه
url Friendly هست / مشکل پرفورمنس هم ایجاد نمیشه

با استفاده از ناگت پکیج glimpse هم میتونید پرفورمنس دو روش رو تست کنید

----------


## r4hgozar

سلام اقا سعید.
خوبی؟
من خیلی وقته کد نمی زنم اما کاری که 2 سال پیش انجام دادم این بود.
من درست جواب دوستان رو ندیدم اما کاری که من انجام دادم اینه.
شما می تونی route  رو تغییر بدی و برای سئو از productname استفاده کنی و با استفاده از همون صفحه رو بسازی و راحتترین کار اینه که ایدی رو هم با همون مطلب پاس بدی به صفحه و در تگ
@html.hiddenfor
قرار بدی در این صورت کاربر به صورت عادی نمی بینه ایدی رو اما شما می تونه هم به submit  و اگه هم نخواستی به صورت jquery اون رو استفاده کنی.

البته بگم که هم از نظر سئو و هم از نظر کد نویسی بهتر یه خاصیت منحصر به فرد به ابتدای اون اضافه کنی ، مثل تاریخ و یا یع عدد منحر به فرد.
موفق باشی

----------


## EnKamran

چرا وقتی كه محصول داره ثبت میشه چك نمیكنی كه نام محصول تكراری نباشه؟اینجوری از همون اسلاگ استفاده میكنی و مطمعنی كه اسامی تكراری نداری

----------


## سعید کشاورز

> چرا وقتی كه محصول داره ثبت میشه چك نمیكنی كه نام محصول تكراری نباشه؟اینجوری از همون اسلاگ استفاده میكنی و مطمعنی كه اسامی تكراری نداری


یه راهشم همینه که گفتی...یعنی اسلاگها رو چک کنیم.ولی ممکنه به مشکل بخوره کاربر و بخواد دوتا اسلاگ داشته باشه و یا جمله.
راه هایی هم که دوستان گفتن همگی نیازه به وجود تگ فرم داشت که به نظرم یه کار غیر منطقی بود.
فعلا با قرار دادن همون آی دی توی آدرس کار رو پیش بردم

----------


## general67

براتون یه راهکار دارم.آدرستون رو اینطوری روت کنین.

www.example.com/Products/EXP-2545/NameEXP:پسسوندی برای شماره محصول.
و name هم یه نام مستعار محصوله یعنی اگر هم حذف بشه مشکلی در پردازش اطلاعات نداره.url friendly هم هست.

ویا اگر میخواهید فقط نام محصول یا هر آدرسی بجر کد محصول داشته باشین باید url تون پردازش بشه و بعد ریدایرکت بشه.

----------


## download69

فکر کنم سوالتو درست متوجه نشدم ولی خوب میتونی بر اساس نام محصول بری و آی دی رو از بانک بخونی مثلا اگه
site.com/Product/YourProductName
آدرس شما باشه در اکش مورد نظر آی دی محصول رو بر اساس YourProductName بخون حالا یا نمایش بده یا توی یک viewmodel  یا یک viewbag قرار بده و جاهای مورد نظرت در view از اون استفاده کن

public ActionResult Product(string p){

var id = db.tbl.where(w => w.Pname == p).select(s => s.id)
}

----------


## nunegandom

KamranShakh
من از این مدل استفاده کردم فقط یه مشکل کوچولو داره - برای سایتی که حجم اطلاعاتش میدونین خیلی کمه خوبه اما اگه حجم زیاد شد سرعت میاد پایین چون باید یک عالمه لینک رو چک کنه تا پیداش کنه محصولمون رو - برای همین دور زدم برگشتم روی اینکه id بذارم و بعد slag رو اضافه کنم به id که هیچ مشکل پرفورمنسی توی این قسمت نباشه

----------

