خروج المغلوب.شبيبة وقائمة مربعات الاختيار:آخر إلى مفك المراقب المالي

StackOverflow https://stackoverflow.com//questions/10698486

سؤال

لدي نموذج عرض مفك التي تبدو مثل هذا:

public class DirectorySearchModel
{
    [Display(Name = "First name contains")]
    public string FirstName { get; set; }

    [Display(Name = "Last name contains")]
    public string LastName { get; set; }

    public CountriesCollection Countries { get; set; }
    public IEnumerable<Country> SelectedCountries { get; set; }
    public IEnumerable<Country> AllCountries { get; set; }
}

يبدو كائن كونتريسكولكتيون (السطر 9) كما يلي:

public class CountriesCollection
{
    [Display(Name = "Countries")]
    public int[] arrCountries { get; set; }
}

الآن ، أنا خلق مثيل جديد ، فارغة من كونتريسكولكتيون ومن ثم إضافته إلى مثيل فارغ من نموذج عرض ديركتوريسيرتشموديل ومن ثم تسلسل كل ذلك في نموذج عرض جافا سكريبت ل خروج المغلوب.شبيبة:

{
"FirstName":null,

"LastName":null,

"Countries":{"arrCountries":[]},

"SelectedCountries":[{"RelationshipManager":{},"CountryId":1,"CountryName":"UK"},{"RelationshipManager":{},"CountryId":2,"CountryName":"France"},{"RelationshipManager":{},"CountryId":3,"CountryName":"Spain"}],

"AllCountries":[{"RelationshipManager":{},"CountryId":1,"CountryName":"UK"},{"RelationshipManager":{},"CountryId":2,"CountryName":"France"},{"RelationshipManager":{},"CountryId":3,"CountryName":"Spain"}]
}

يتم عرض مربعات الاختيار الخاصة بي على النحو التالي: <input checked="checked" data-bind="checked: Countries.arrCountries" id="Countries_arrCountries30" name="Countries.arrCountries" type="checkbox" value="1">.التحقق من زوجين يعني أنك في نهاية المطاف مع هذه الضربة القاضية.شبيبة عرض نموذج:

{
"FirstName":null,

"LastName":null,

"Countries":{"arrCountries":["1", "3"]},

"SelectedCountries":[{"RelationshipManager":{},"CountryId":1,"CountryName":"UK"},{"RelationshipManager":{},"CountryId":2,"CountryName":"France"},{"RelationshipManager":{},"CountryId":3,"CountryName":"Spain"}],

"AllCountries":[{"RelationshipManager":{},"CountryId":1,"CountryName":"UK"},{"RelationshipManager":{},"CountryId":2,"CountryName":"France"},{"RelationshipManager":{},"CountryId":3,"CountryName":"Spain"}]
}

تقديم وجهة نظري بشكل طبيعي (أي.عن طريق زر إرسال وليس مع خروج المغلوب.شبيبة) إلى إجراء مفك التي تتوقع DirectorySearchModel, ، أنا قادر على طلب model.Countries.arrCountries للحصول على قائمة بالعناصر المحددة ، ولكن عند استخدامها...

$.post("/MyController/MyAction", ko.toJS(viewModel), function(returnData) {
    $("#resultCount").html(returnData);
});

أو...

$.post("/MyController/MyAction", viewModel, function(returnData) {
    $("#resultCount").html(returnData);
});

إلى إجراء آخر يتوقع نفس الشيء DirectorySearchModel, model.Countries.arrCountries دائما null!تساءلت عما إذا كان ذلك بسبب الضربة القاضية.شبيبة نشر arrCountries مقالات كما string[]ق عندما مفك تتوقع int[]ق ، ولكن تغيير رمز مفك بلدي أن نتوقع string[]لا يبدو أن الصورة تتغير كثيرا..!ال CountriesCollection كائن داخل DirectorySearchModel يبدو أنه موجود ، لكنه arrCountries داخل هذا دائما null.

أي أفكار?أي مساعدة محل تقدير كبير!

تحرير

الإجراء الذي يتلقى الضربة القاضية.شبيبة فيوموديل:

public MvcHtmlString ResultCount(DirectorySearchModel model)
{
    return new MvcHtmlString(getResultCount(model).ToString());
}

ال getResultCount الطريقة:

public int getResultCount(DirectorySearchModel model)
{
    IUserRepository userRepository = new UserRepository();
    int count = userRepository.Search(model, null).Count();
    return count;
}

ثابت!

بفضل كونستانتين لافتا إلى أن التحول بسيط من $.أضف إلى $.اياكس لإرسال خروج المغلوب بلدي.شبيبة عرض نموذج العودة إلى بلدي مفك العمل كان كل ما هو مطلوب!ها هي $.رمز اياكس أنا باستخدام:

$.ajax({  
    type: "POST",
    url: "/MyController/MyAction",
    data: ko.toJSON(viewModel),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        $("#resultCount").html(data);
    }
});
هل كانت مفيدة؟

المحلول

لا يمكنك استخدام $.آخر تحتاج إلى الذهاب ل underlying الأساسية.أجاكس وإضافة كونتنتتيب الصحيح لجعل مفك قبول جسون نشرها والقيام نموذج ملزمة (كونتنتتيب يجب أن يكون " تطبيق / جسون;محارف = أوتف-8") جوجل لذلك ، وسوف حد ذاتها الكثير من الأمثلة

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