سؤال

لقد قمت بمراجعة العديد من المشاركات هنا للحصول على حل.سأحاول سؤال جديد.

النموذج الخاص بي:

<form method="post" action="@Url.Action("Manage")"  data-cs-ajax="true" data-cs-target="#catalogList" >

يحتوي على حقل الإكمال التلقائي وترحيل الصفحات، وهو مشابه جدًا لمثال OdeToFood من Scott Allen.

هنالك :

<input type="submit" value="Update" class="btn btn-default" />

الذي يقوم بتحديث بعض العناصر التي تمت تصفيتها ليتم تحديدها من - كل شيء يعمل بشكل رائع - وأيضًا:

<input type="submit" name="btnSave" id="btnSave" value="Save" class="btn btn-default" />

كلاهما نجح في ضرب:

//POST: /WebCatalog/Manage/5
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage([Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
    { ...

لقد قاموا بتنفيذ إجراء وحدة التحكم بسبب جافا سكريبت:

$(function () {

var ajaxFormSubmit = function () {
    var $form = $(this);

    var options = {
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize()
    };

    $.ajax(options).done(function (data) {
        var $target = $($form.attr("data-cs-target"));
        var $newHtml = $(data);
        $target.replaceWith($newHtml);
        var options = {};
        $newHtml.effect("highlight", options, 500, doneEffect);
    });

    return false;
};

الآن...

أريد تعيين حقل في النموذج للسماح لوحدة التحكم بمعرفة أنه تم النقر على زر btnSave الثاني...لحفظ السجل بالطبع....

سو...

$(function () {

    $("#btnSave").click(function () {

        $("isSubmitted").val("1");
        return true;
    });

});

وهذا يحرق:قبل إرسال الصفحة عبر ajax في ajaxFormSubmit، يتم إطلاق رمز jQuery للزر $(#btnSave) بنجاح.

ومع ذلك، في إجراء وحدة التحكم، تكون قيمة isSubulated دائمًا 0.

لقد حاولت :

$("isSubmitted").val(1);

لقد جربت النموذج كطريقة = 'get' ولم أقم بنشره بعد - على الرغم من أنني قد أحاول بعد ذلك تغيير الطريقة باستخدام جافا سكريبت في وظيفة btnSave.click js - لست متأكدًا من كيفية القيام بذلك... إذا استطعت' إذا قمت بحفظ قيمة في عنصر تحكم النموذج، فلماذا سأتمكن من تغيير طريقة النموذج؟؟

لقد قمت بتجربة $Ajax.ActionLink - لكني أحصل دائمًا على خطأ 500 IIS.

في الأساس، أحتاج إلى طريقة لمعرفة أن المستخدم قام بالنقر فوق زر الحفظ، بدلاً من زر التحديث.

هو موضع تقدير أي نصيحة!

هل كانت مفيدة؟

المحلول

Robert Achmann، إليك إجابتي

يبدو أن المحدد في $ ("issubmitted") مفقود، على سبيل المثال$ ("# ISSUBMITITED") لإدخال معرف ISSubmitted.

نصائح أخرى

لا تحتاج إلى قيمة مخفية لإخبار وحدة التحكم بالزر الذي تم النقر عليه.ما عليك فعله هو تسمية الزرين على النحو التالي

<input type="submit" name="btnAction" value="Update" class="btn btn-default" />
<input type="submit" name="btnAction" value="Save" id="btnSave" class="btn btn-default" />

كما ترون، لديهم نفس الاسم ولكن قيم مختلفة (التحديث مقابل الحفظ).

في وحدة التحكم، قم بإضافة معلمة أخرى تسمى btnAction, ، وهو اسم الأزرار الخاصة بالإجراء.

[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage(string btnAction, [Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{
     if(btnAction.ToLower() == "save")
     {
          // The save button was clicked
     }
     else if(btnAction.ToLower() == "update")
     {
          // The update button was clicked
     }
     else
     {
          // default ...
     }
}

في الأساس المعلمة btnAction سيحصل على قيمة زر الإرسال الذي يؤدي إلى تشغيل النموذج للحصول على النشر.

نأمل أن تكون هذه المساعدة.

هل يمكنك حقل مخفي في النموذج الخاص بك لتخزين قيمة ما هو النقر فوق الحقل (التحكم في هذا مع معالجات الأحداث المسجين)، ولهذا يمكنك جعل نوع الزر الخاص بك="زر" بدلا من النوع="إرسال" (من أجل تقديم النموذج الخاص بك من رمز المسج الخاص بك) أو يمكنك استخدام EventPreventDefault.

حسنا، إليك نموذج رمز قد يساعدك:

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top