سؤال

إذا كنت تقوم بإجراء تسلسل لنموذج باستخدام شيء مثل jQuery، فغالبًا ما يقوم بتعيين مفاتيح وقيم JSON لخصائص كائن في إجراء وحدة التحكم الذي تقوم بالنشر إليه.لذا:

مسج:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data:  $('#form').serialize(),
        complete: callFunction
        }
    });

تحتوي التفاصيل الرئيسية المفترضة على عناصر سيكون لها اسم المعلمة كمفتاح، ويجب تعيينها للكائن مباشرة:

فعل:

public void TestMVC(MyObject obj)
{
//Obj should now contain the data from the serialised form
}

بريد:

Name: "Bob"
Age: "999"
Sex: "Unknown"

هل يعلم أحدكم كيف يعمل هذا الشيء؟إنه ينكسر في كل مرة أمرر فيها النموذج وأي بيانات إضافية إلى وحدة التحكم.

أرغب في إرسال محتويات البيانات بالإضافة إلى QueryString التي يمكن أن تحتوي على أي عدد وأنواع من أزواج المفاتيح/القيمة إلى وحدة التحكم.يمكنني استخراج أزواج المفاتيح/القيمة هذه على الخادم حيث لا يمكنني إنشاء كائن لها في توقيع الطريقة.ومع ذلك، هذا فشل في العمل على النحو المنشود.

مسج:

function PostForm() {

    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data: 
        { 
           Obj: $('#form').serialize(),
           TheWeirdQueryString: $('.additionalParams').serialize(),
        }
    });
};

فعل:

public void TestMVC(MyObject obj, String TheWeirdQueryString)
{
//Obj now does NOT contain the element, it is NULL. Whereas TheWeirdQueryString works fine. 
}

بريد:

Obj: name=bob&age=999&sex="unknown"
TheWeirdQueryString: param1=1&param2=2

أعتقد أن السبب في ذلك هو أنني قمت بالفعل بإنشاء كائن JSON باعتباره البيانات وقمت بتعيين الخصائص على اسم الكائن.

هناك اختلاف في قيم POST التي تظهر في Firebug.عندما أقوم بنشر الكائن بمفرده، فإن قيم POST هي جميع مفاتيح الكائن/النموذج مع القيم المقابلة لها.في المثال الثاني هناك خاصيتان بسيطتان، الاسم الذي أعطيتهما، تحتوي كل منهما على QueryString (Foo=1&Bar=2) ولا يمكن لـ MVC تعيين QueryString لأعضاء الكائن (أو هكذا يبدو).

هل هناك أي طريقة على الإطلاق للبدء في العمل كما هو الحال في المقام الأول، ولكن أيضًا لإرسال بيانات إضافية إلى وسيطة ثانية في الإجراء؟أعتقد أنه سيتم إضافة خاصية إضافية إلى جميع الخصائص الموجودة التي تم إنشاؤها عندما يقوم jquery بإجراء تسلسل للنموذج.

المنشور الذي أريده بالفعل هو:

Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1&param2=2
هل كانت مفيدة؟

المحلول

معلمة dataType في طريقة $.ajax هي نوع الاستجابة (نوع البيانات التي تتوقعها من الخادم)، وليس الطلب.جرب هذا بدلاً من ذلك:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
    });
};

أو:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC" + "?" + $('.additionalParams').serialize(),
        type: "POST",
        dataType: "application/JSON",
        data: $('#form').serialize()
    });
};

محدث:

جرب هذا:

مراقب:

public void TestMVC(MyObject obj, String[] TheWeirdQueryString)
{
}

عميل:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
    });
};

ولكن من جانب العميل، يجب أن تكون المعلمات الإضافية بالتنسيق التالي:

TheWeirdQueryString[0]=param1&TheWeirdQueryString[1]=param2&...&TheWeirdQueryString[n]=paramN

لذلك يجب أن تحتوي عناصر $('.additionalParams') على سمات "id" و/أو "name" مثل:TheWeirdQueryString[1]، TheWeirdQueryString[2] ...سلسلة الاستعلام الغريب[N]

أتمنى أن يساعدك هذا

نصائح أخرى

والبيانات هو كائن

...
data: { 
    x :$('#form').serialize(), 
    y:'something else'
}
...

حل آخر إذا كنت تريد قاموسًا لأزواج المفاتيح/القيمة:

public void TestMVC(MyObject obj, IDictionary<string, object> TheWeirdQueryString)
{
}

عميل:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",
        type: "POST",
        dataType: "application/JSON",
        data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
    });
};

تنسيق $('.additionalParams').serialize():

TheWeirdQueryString[0].Key=param0&TheWeirdQueryString[0].Value=value0&TheWeirdQueryString[1].Key=param1&TheWeirdQueryString[1].Value=value1&...&TheWeirdQueryString[n].Key=paramN&TheWeirdQueryString[n].Value=valueN

محدث:

أنت بحاجة إلى شيء مثل هذا:

<input class="additionalParams" type="text" name="TheWeirdQueryString[0].Key" value="param0" />
<input class="additionalParams"type="text" name="TheWeirdQueryString[0].Value" value="value0" />
<!-- ... -->
<input class="additionalParams"type="text" name="TheWeirdQueryString[n].Key" value="paramN" />
<input class="additionalParams"type="text" name="TheWeirdQueryString[n].Value" value="valueN" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top