ارسال پارامتر از View به اکشن متد در کنترلر در Asp.net mvc core
سلام. من تازه برنامه نویسی رو شروع کردم و دارم یک وبسایت میسازم برای تست مهارتای خودم. الان دارم یه سایت فروشگاهی میسازم و یکسری از بخش هاش کامل شده ولی الان تو قسمت جزییات محصول گیر کردم. مشکلم اینه که آی دی محصول رو میگیرم و موقعی که کنترلر میخواد دریافتش کنه آی دی 0 رو میفرسته. واس بقیه قسمت ها همچین چیزی رو پیاده سازی کرده بودم ولی همچین مشکلی نداشتن.
کد هام=
سرویس دریافت جزییات محصول:
namespace Store.Application.Services.Products.Queries.GetProductDetailForSite
{
public interface IGetProductDetailForSiteService
{
ResultDto<ProductDetailForSiteDto> Execute(long Id);
}
public class GetProductDetailForSiteService : IGetProductDetailForSiteService
{
private readonly IDatabaseContext _context;
public GetProductDetailForSiteService(IDatabaseContext context)
{
_context = context;
}
public ResultDto<ProductDetailForSiteDto> Execute(long Id)
{
var product = _context.Products
.Include(p => p.Category)
.ThenInclude(p => p.ParentCategory)
.Include(p => p.ProductImages)
.Include(p => p.ProductFeatures)
.Where(p => p.Id == Id).FirstOrDefault();
if (product == null)
{
throw new Exception("Product Not Found.....");
}
return new ResultDto<ProductDetailForSiteDto>()
{
Data = new ProductDetailForSiteDto
{
Brand = product.Brand,
Category = $"{product.Category.ParentCategory.Name} - {product.Category.Name}",
Description = product.Description,
Id = product.Id,
Price = product.Price,
Title = product.Name,
Images = product.ProductImages.Select(p => p.Src).ToList(),
Features = product.ProductFeatures.Select(p => new ProductDetailForSite_FeaturesDto
{
DisplayName = p.DisplayName,
Value = p.Value
}).ToList(),
},
IsSuccess = true,
};
}
}
public class ProductDetailForSiteDto
{
public long Id { get; set; }
public string Title { get; set; }
public int Price { get; set; }
public string Category { get; set; }
public string Brand { get; set; }
public string Description { get; set; }
public List<ProductDetailForSite_FeaturesDto> Features { get; set; }
public List<string> Images { get; set; }
}
public class ProductDetailForSite_FeaturesDto
{
public string DisplayName { get; set; }
public string Value { get; set; }
}
}
کنترلر :
namespace EndPoint.Web.Controllers
{
public class ProductController : Controller
{
private readonly IProductFacad _productFacad;
public ProductController(IProductFacad productFacad)
{
_productFacad = productFacad;
}
public IActionResult Index(int Page = 1)
{
return View(_productFacad.GetProductForSiteService.Execute(Page).Data);
}
[HttpGet]
public IActionResult Detail(long Id)
{
return View(_productFacad.GetProductDetailForSiteService.Execute(Id).Data);
}
}
}
صفحه اصلی قسمت محصولات :
<div class="products-grid clearfix row-fluid">
@foreach (var item in Model.Products)
{
<div class="product fl">
<div class="product-preview">
<img src="~/@item.ImageSrc" alt="product" style="display: inline-block; width: 206px;">
</div>
<div class="product-info" style="height: 90px;">
<h5>
<a href="~/product/Detail/@item.Id"> @item.Title </a>
</h5>
<h4 class="fl">@item.Price.ToString("n0") <span style="text-decoration : none; color :black">تومان</span></h4>
<div class="button-box fr" style="opacity: 0;">
<div>
<i class="icon-shopping-cart"></i>
<span>افزودن به سبد خرید</span>
</div>
<div>
<i class="icon-refresh"></i>
</div>
<div>
<i class="icon-heart"></i>
</div>
</div>
</div>
<div class="product-rating">
<div class="stars">
<span class="star"></span><span class="star"></span><span class="star"></span><span class="star"></span><span class="star"></span>
</div>
</div>
</div>
}
</div>
<div class="clearfix">
<ul class="products-pagination fr">
<li><i class="icon-caret-right"></i></li>
<li class="active">1</li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li>...</li>
<li><a href="#">99</a></li>
<li><a href="#"><i class="icon-caret-left"></i></a></li>
</ul>
</div>
</div>
با بریک پوینت پروژه رو تریس کردم و دیدم که وقتی روی محصول کلیک میکنم آی دی رو به کنترلر میفرسته و همه چیز درست پیش میره ولی بعدش یکبار دیگه این کار رو انجام میده و این دفعه آی دی 0 رو میفرسته و پروژه ارور میده. من الان نمیدونم چرا یکبار دیگه همهی مراحل طی میشه و آی دی 0 رو میفرسته.
پاسخ هوش مصنوعی
به نظر می رسد که مشکل شما مربوط به نحوه ارسال درخواست به کنترلر باشد. در ASP.NET Core MVC، زمانی که شما از یک لینک برای هدایت به متد اکشن استفاده می کنید، اگر لینکتان به درستی پیکربندی نشده باشد، ممکن است که مقادیر پارامترهای ارایه شده به کنترلر نادیده گرفته شوند یا تغییر کنند.
لینک زیر ممکن است به شما کمک کند تا پارامترها را به درستی ارسال کنید:
@item.Title
با استفاده از جایگاه `@Url.Action()`، اطمینان حاصل می کنید که URL صحیح شامل پارامتر `Id` به درستی ایجاد می شود و این مشکل را رفع خواهد کرد.
همچنین، اطمینان حاصل کنید که هیچ ریدایرکت یا فرایند دیگری در مسیر درخواست وجود ندارد که بتواند باعث تغییر مقادیر پارامتر شود.
دستوری که شما برای ارسال اطلاعات به سمت کنترلر نوشتید این هست :
<a href="~/product/Detail/@item.Id"> @item.Title </a>
به نظرم بهتره از TagHelper ها استفاده کنید. چون شما دارید از Asp.net Core استفاده می کنید و امکانات خوبی در این رابطه داره. می تونید به صورت زیر بنویسید دستور خودتون رو
<a asp-controller="Product" asp-action="Detail" asp-route-Id="@item.Id">@item.Title</a>
اگر هم نمی خواید از TagHelper ها استفاده کنید بهتره با توجه به Routing تعریف شده در کلاس startup.cs عمل کنید. یعنی به این شکل
<a href="~/product/Detail?Id=@item.Id"> @item.Title </a>
مشکل از Layout بود. من تجربه frontend ندارم و نمیدونم چجوری همچین اتفاقی میافتاد ولی layout رو یه بار دیگه ساختم و مشکل درست شد.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2