نمایش نتایج 1 تا 6 از 6

نام تاپیک: ساخت form با چند دکمه

  1. #1

    ساخت form با چند دکمه

    سلام دوستان من یه جدول برای کاربر طراحی کردم و میخوام بتونه هم حذف کنه هم ویرایش .یعنی به دوتا دکمه نیاز هست اما هر کار میکنم نمیشه توی <form> بیشتر از یه دکمه گذاشت .راهش چی هست؟؟؟

  2. #2

    نقل قول: ساخت form با چند دکمه


  3. #3

    نقل قول: ساخت form با چند دکمه

    سلام هر کدوم از دکمه ها رو داخل یک فرم مجزا قرار بدید

  4. #4

    نقل قول: ساخت form با چند دکمه

    دوست عزیز شما باید type دکمه ای که میزاری برای حذف ازنوع button باشه نه sumbit و از طریق رویداد onclick با جی کوئری بهش دستور بدی که حذف کنه

  5. #5

    نقل قول: ساخت form با چند دکمه



    @using (Html.BeginForm("Edit", "SasProgram", FormMethod.Post))
    {
    <label for="Name">Name</label>
    @Html.TextBoxFor(model => model.Name)


    <input type="submit" class="button" value="Edit" />
    }


    @using (Html.BeginForm("Delete", "SasProgram", FormMethod.Post))
    {
    <input type="submit" class="button" value="Delete" />
    }



    بهترش اینه که برای این 2 کار از یک اکشن استفاده نشه و در کنتلر از 2 اکشن Edit و Delete استفاده کنید و برای Delete هم یک Confirmation بزارید .

  6. #6

    نقل قول: ساخت form با چند دکمه

    برای مثال فرمی داریم که داده‌های وارد شده در ان باید به دو صورت برای یک کاربر ارسال بشن یا از طریق پیامک یا از طریق ایمیل (این فقط یک مثال پیش فرض هست) و .... در حالت عادی ما در یک فرم نمیتونیم دو عدد Submit داشته باشیم که هر کدوم به یک Action جدا بسط داده بشه خب راه حل چیه ؟ شاید با خودتون بگید خب دو input از نوع radio قرار میدیم و در یک اکشن کنترل میکنیم که کدوم یکی انتخاب شده و عملیات رو با اون معیار انجام میدیم ... به نظرتون زیباتر نیست برای هر عملیات که ممکن باشه هر کدوم کاملا روال کاری متفاوتی داشته باشه یک Action وجود داشته باشه ؟ در این صورت خوانایی کد خیلی بالاتر میره و Unit Test هر Action کاملا مشخص هست که قراره چه فرایندی رو مورد تست قرار بده و مجبور نیستیم چندین حالت رو با عبارات شرطی از هم جدا کنیم و همه چی قاطی بشه با هم ... من در کل با امکاناتی که C#‎‎‎ و MVC در اختیارم قرار میده حاظر نیستم تن به کد نویسی به صورت کلاسیک و قاطی پاتی بدم سعی میکنم با مطالعه‌ی سورس MVC بهترین حالت رو انتخاب کنم شما چطور ؟ معلومه که همه همینو میخوان پس بریم سر اصل مطلب .
    قطعه کد Html و Razor ساده‌ی زیر رو در نظر بگیرید برای View :


    کد HTML:
    @model Models.MyModel@{    Layout = null;}<!DOCTYPE html><html><head>    <title>ViewPage1</title></head><body>    <div>        @using (Html.BeginForm("SendMessage", "Home", FormMethod.Post))        {
                @Html.LabelFor(x => x.Name);            @Html.TextBoxFor(x => x.Name);
                <input type="submit" value="ارسال توسط پیامک" name="Send_sms" />            <input type="submit" value="ارسال توسط ایمیل" name="Send_email" />        }    </div></body></html>
    خب ما دو تا Submit داریم . یکم اگه شیطنت کنید و مقادیر ارسال شده بعد از submit این فرم رو توسط ابزارهای مانیتورینگ بررسی کنید میبینید که روی هر کدوم از Submit‌ها که کلیک میشه داده ای با نام اون که در خاصیت name اون و مقدار موجود در value اون همراه اون فرم به سرور ارسال میشه و اون یکی Submit از این اتفاق بی نصیب میمونه ... خب ما هم استفاده‌ی لازم رو از این موضوع شیرین میبریم و با یک تکنیک تهاجمی از این موضوع برای رسیدن به هدفمون استفاده میکنیم .

    این هم کلاس Model ماست :


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel;


    namespace Models
    {
    public class MyModel
    {
    [DisplayName("نام خود را وارد کنید :")]
    public string Name { get; set; }
    }
    }


    و اما یک نکته‌ی دیگه . توجه داشته باشید که ما در قسمت View نام Action رو در فرم, SendMessage مشخص کردیم . ولی ... اصلا در واقع همچین اکشنی وجود نداره ! پس چرا ما همچین نامی رو واسه اکشن فرم گذاشتیم !؟
    دلیل اینه که ما قصد داریم با یک ActionNameSelectorAttribute درخواست کاربر رو شکار کنیم و اون رو به اکشن دلخواه ارجاع بدیم ... جالبه نه ؟ ولی چه جوری ... کلاس زیر رو بهش دقت مضاعف کنید و در پروژتون ایجادش کنید :


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Reflection;


    namespace ActionHandlers
    {
    public class SendMessageHandlerAttribute : ActionNameSelectorAttribute
    {
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
    if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
    return true;


    if (!actionName.Equals("SendMessage", StringComparison.InvariantCultureIgnoreCase))
    return false;


    var request = controllerContext.RequestContext.HttpContext.Reque st;
    return request[methodInfo.Name] != null;
    }
    }
    }


    خب حالا بخش Controller رو بهش دقت کنید که ما در اون دو اکشن رو با نام هایی که برای هر Submit مشخص کردیم مینویسیم و ActionNameSelectorAttribute نوشته شده رو به اونها بسط میدیم.


    [SendMessageHandler ]
    [HttpPost]
    public ContentResult Send_sms(MyModel mdl)
    {
    /// Do something ...
    return string.Empty ;
    }


    [SendMessageHandler ]
    [HttpPost]
    public ContentResult Send_email(MyModel mdl)
    {
    /// Do something ...
    return string.Empty;
    }


    خب حالا بعد از کلیک بر روی هر Submit اکشن متناظر با اون اجرا میشه . بعد از ارسال درخواست به سرور MVC در بین اکشن‌های موجود در Controller مشخص شده به دنبال اکشن معین شده میگرده و وقتی به اکشن‌های ما میرسه میبینه عجب ! اون دوتا ActionNameSelectorAttribute سفارشی دارن پس میره ببینه چه خبره اونجا که ما با یک حرکت تهاجمی بررسی میکنیم که اگه نام اکشن مشخص شده در فرم با نام اکشن در حال بررسی مساوی بود که همینو اجرا کن ( یعنی ما میتونی اکشنی با نام SendMessage هم داشته باشیم ) . اگه نام اکشن مشخص شده در فرم اون نامی نبود که ما میخوایم که کلا بیخیال هندل کردن اکشن میشیم میزاریم خود MVC تصمیم بگیره . و در اخر بررسی میکنیم که ایا در درخواست جاری مقداری با نام اکشن در حال بررسی وجود داره !؟ اگه داشت یعنی همون Submit که ما میخوایم وصل بشه به این اکشن کلیک شده پس اکشن در حال بررسی رو بسط میدیم به درخواست ارسال شده ... به همین سادگی ...

    جز روشی که در بالا ذکر شد استفاده از data-form-action موجود در نگارش 5 از HTML اصولیترین روش یا بهتره بگیم تمیز‌ترین روش در بین مواردی هست که ذکر کردید ولی خب برنامه نویسای وب همیشه با مرورگرهای مختلف در جنگ هستن و فعلا زیاد استفاده از این روش جایز نیست چون بعضی از مرورگرهای کمی قدیمیتر پشتیبانی نمیکنند پس بهتره از تکنیکهای مورد اطمینانتر استفاده کنیم که نمونش در مقاله‌ی بالا ذکر شد ...


    این نمونه روش‌های خلاقانه و جالب از جمله ActionNameSelectorAttribute به وفور در نسخه‌های جدید mvc وجود داره خوشبختانه .


    پیروز و موفق باشید .


تاپیک های مشابه

  1. سوال: ساخت form با ++c در visual studio
    نوشته شده توسط ++++++A در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: یک شنبه 18 مرداد 1394, 18:15 عصر
  2. ساخت دیالوگ با 3 دکمه
    نوشته شده توسط ehsanh22 در بخش Android Studio
    پاسخ: 3
    آخرین پست: چهارشنبه 16 اردیبهشت 1394, 10:27 صبح
  3. آموزش: ساخت چند دکمه زیبا با CSS
    نوشته شده توسط azamicu در بخش طراحی وب (Web Design)
    پاسخ: 0
    آخرین پست: سه شنبه 24 دی 1392, 23:09 عصر
  4. کامپوننتی برای ساخت دکمه با چند عکس
    نوشته شده توسط nicolas1390 در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 6
    آخرین پست: شنبه 29 تیر 1392, 10:27 صبح
  5. Form با چند ویژگی داشته باشم؟
    نوشته شده توسط saeedIRHA در بخش VB.NET
    پاسخ: 8
    آخرین پست: دوشنبه 07 آذر 1384, 21:06 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •