سلام و احترام
من در یک بخش از برنامه خودم می خوام سفارش یکسری کتاب بگیرم همه کتاب هام رو با foreach رندر می کنم و پایین هر کتاب یک actionlink خرید گذاشتم که bookid رو به یک اکشن می بره و من این کتاب رو برای اون نفر ثبت کنم ولی الان مشکل اینه که می خوام کاربر تعداد کتابی رو هم که می خواد مثلا از این کتاب ۵ نسخه می خواد رو هم به اون اکشن بفرستم نمی دونم باید چکار کنم یک input نوع html ای ساده گذاشتم چون textboxfor و ... نمی تونم که استفاده کنم . ممنون می شم راهنمایی کنید این کار رو بتونم انجام بدم . نمونه کدم هم به شکل زیر هست :
@model IEnumerable<bookproject.Models.book.ViewModels.bookMainShowViewModel> @Html.BeginForm("Addbook","book") { @foreach (var item in Model) { <div class="entry one-fourth wow fadeInRight"> <figure> <a href="#openModal"><img src="/images/img6.jpg" alt="@item.Name" /></a> </figure> <div class="container"> <h2>@item.Name</h2> <div class="actions"> <div> <h2>@item.price</h2> </div> </div> <div class="f-row bwrap"> <input type="text" placeholder="تعداد کتاب"/> </div> <div class="f-row bwrap"> @Html.ActionLink( "خرید کتاب", // linkText "Addbook", // actionName "book", // controllerName new { // routeValues bookId = @item.bookId }, null // htmlAttributes ) </div> </div> </div> } }
با تشکر
میتونید با Ajax مدیریت کنید
زمانی که کلید خرید زده شده کد کتاب و مقدار داخل input را به یک action در کنترلر ارسال کنید
برای شناسایی input میتونید از کد کتاب استفاده کنید
مثلا txt_102
سلام
برای این کار و برای این که بتوان URL های شما بیشتر از سه قسمت باشد می توانید در داخل route.config خود تنظیمات زیر را انجام دهید .
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}/{*others}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
با این الگو می توانید آدرس هایی با طول متغیر داشته باشید.و به هر تعداد دلخواه / در URL خود وارد کنید .البته در مورد مشکل شما به دلیل اینکه پارامتر اکشن شما با Id که به صورت پیش فرض توسط MVC قابل درک است ،، این پارامتر را با New کردن به اکشن فرستاده اید می توانید برای ارسال تعداد کتاب درخواستی هم یک متغیر int به نام مثلا OrderCount در نظر بگیریدو آن را با new به تابع ارسال کنید .
اگر این روش جواب نداد از انجا که حدس می زنم از Pattern سه قسمتی خود MVc که به صورت پیش فرض وجود داشته است استفاده می کنید ، برای فراخوانی این اکشن با دو پارامتر می توانید به صورت های زیر عمل کنید
اگر از تگ a استفاده می کنید چیزی شبیه این
<a href="/book/AddBook/id?orderCount=@item.count"></a>
به عنون مثال اکشن زیر با دو پارامتر را در نظر بگیرید
public ActionResult GetImages(string artistName, string apiKey)
فراخوانی ها می تواند با فرمت زیر باشد
/Artist/GetImages/?artistName=cher&apiKey=XXX
public ActionResult GetImages(string id, string apiKey)
اما در اکشن بالا چون Id به صورت پیش فرض توسط mvc قابل درک است می توانیم نحوه فراخوانی اکشن را به صورت زیر داشته باشیم
/Artist/GetImages/cher?apiKey=XXX
اما اگر بنا دارید هر پارامتر شما به صورت جداگانه ای به / جدا شود یعنی به صورت زیر باشد
/Artist/GetImages/cher/api-key
باید در route.config خود تغییرات ایجاد کنید
routes.MapRoute( "ArtistImages", // Route name "{controller}/{action}/{artistName}/{apikey}", // URL with parameters new { controller = "Home", action = "Index", artistName = "", apikey = "" } // Parameter defaults );
امیدوارم کمک کرده باشم
سلام
مشکل من با ارسال پارامتر هست ما زمانی از foreach استفاده می کنیم چطور یک کادر input یا textboxfor یا ... بزاریم چون اونجا به item دسترسی داریم و مدلی در کار نیست که کاربر تعداد رو وارد کنه بعد ما بتونیم ارسال کنیم . تمام بحث routing که فرمودید رو من می دونستم فقط الان مشکل اصلی نحوه ارسال تعداد کتابی که کاربر وارد می کنه است این مورد رو یک راهکار می خوام با ajax هم سعی کردم نتونستم پیاده کنم ...
تشکر
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)