دسته بندی ها
13:01 1401/06/01

دریافت مقدار از PartialView در کنترلر در Asp.net Core

مشخصات سوال کننده :
کاربر : farhadrezazadeh     امتیاز کاربر : 3     رتبه کاربر : 136
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 1705
هوش مصنوعی

پاسخ هوش مصنوعی

برای ارسال مقدار Id به کنترلر از PartialView، شما باید یک فیلد مخفی (hidden input) برای Id در فرم اضافه کنید. این فیلد باید مقدار Id هر عنصر را که در حال پردازش هستید، نگهداری کند. در حال حاضر کد شما تنها یک دکمه ارسال دارد و هیچ عنصری برای ارسال Id وجود ندارد.

شما می توانید به PartialView خود یک فیلد مخفی اضافه کنید به صورت زیر:

@model IEnumerable<LibraryWebSystem.DataLayer.ViewModels.ManageRequestViewModel>

<form asp-controller="ManageRequest" asp-action="RejectRquestPost" method="post">
    <div class="modal-header">
        <button type="button" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h4 class="modal-title">رد درخواست امانت</h4>
    </div>

    @foreach (var item in Model)
    {
        <div class="modal-body">
            آیا از رد درخواست کاربر با نام <span>@item.userFullName</span> برای کتاب <span>@item.BookName</span> مطمین هستید ؟
            <input type="hidden" asp-for="@item.Id" name="Id" />
        </div>
    }

    <div class="modal-footer">
        <button type="button" data-dismiss="modal">بازگشت</button>
        <button type="submit">
            تایید
        </button>
    </div>

</form>

توجه داشته باشید که استفاده از asp-for و name="Id" برای فیلد مخفی ضروری است تا مقدار Id به درستی به کنترلر ارسال شود. این باعث می شود که وقتی فرم ارسال می شود، مقدار Id به حالت صحیح در model موجود در متد کنترلر شما قرار گیرد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 17:37 1401/06/01

فکر میکنم مشکل شما این هست که میخواید یک مقدار رو از View یا PartialView به سمت کنترلر ارسال کنید و نمی تونید. ببینید شما یک اکشن متد دارید از نوع HttpGet که می فرمایید مشکلی نداره و Id رو در اینجا دارید و یک اکشن متد هم از نوع HttpPost که در اینجا نمی تونید مقدار رو دریافت کنید. 

به مثال زیر توجه کنید :

شما در اکشن متد HttpGet می تونید مقدار Id رو درون یک ViewBag نگهداری کنید.

[HttpGet]
public IActionResult myName(int Id)
{
   ViewBag.myId = Id;
   return PartialView();
}

در کدهای View

<form>
   ...
   <input Id="Id" name="Id" value="@ViewBag.myId" hidden />
</form>

کد بالا رو خیلی خطلاصه نوشتم. در تگ فرم خودتون یک input قرار بدید و در value اون مقدار ViewBag رو قرار بدید. حالا بعد از اینکه فرم شما به سمت سرور Post میشه در اکشن متد HttpPost هم به مقدار Id دسترسی دارید.

[HttpPost]
public IActionResult myName(int Id)
{
   //عملیات دیتابیس
}

 

به این پاسخ امتیاز بدهید    2
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود