سؤال

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

عندما يقوم مستخدم بتسجيل الدخول إلى الموقع وتمرير المصادقة، يتم توجيهه إلى طريقة الفهرس في وحدة التحكم.تقبل هذه الطريقة معرفًا فارغًا من النوع int.عندما يقوم المستخدم بتسجيل الدخول، يكون المعرف الذي تم تمريره إلى أسلوب الفهرس فارغًا دائمًا.أحصل بعد ذلك على معرف المستخدم الذي قام بتسجيل الدخول وأجري استعلامًا للحصول على تفاصيلهم (انظر أدناه).

    public ActionResult Index(int? id)
    {
        DashboardViewModel model = new DashboardViewModel();

        if(id == null || id == 0)
        {
            User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
            model.SelectedUser = user;
        }
        else
        {
            model.SelectedUser = _userService.GetUserByID(id.Value);
        }

        return View(model);
    }

أقوم بتمرير تفاصيلهم إلى ViewModel ثم إلى طريقة عرض تقوم بعد ذلك بكتابة عنوان بريدهم الإلكتروني إلى واجهة المستخدم.

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

بمجرد قيام المستخدم بعرض واجهة المستخدم، يمكنه بعد ذلك تحديد مستخدمين آخرين من القائمة المنسدلة.عند قيامهم بذلك، يجب أن يحل عنوان البريد الإلكتروني للمستخدمين المحددين محل عنوانهم على واجهة المستخدم.

العملية تعمل مثل هذا.يقوم المستخدم باختيار اسم من القائمة المنسدلة، ويتم استدعاء وظيفة JQuery

$(document).ready(function () {

    $("#UserID").change(GetUser);

    function GetUser() {

        $.ajax({
            type: "GET",
            url: '/Dashboard/Index/',
            data: { id: $(this).val() },
            error: function () {
                alert("An error occurred.");
            },
            success: function () {
                alert("success");
            }
        });
    }
});

تقوم هذه الوظيفة بتمرير المعرف من القائمة المنسدلة مرة أخرى إلى طريقة الفهرس في وحدة التحكم.تدرك طريقة الفهرس، هذه المرة، أن المعرف ليس فارغًا، وبالتالي، تقوم بإجراء استعلام للحصول على تفاصيل المستخدمين المحددين، بناءً على معرفهم (راجع طريقة الفهرس أعلاه).

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

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

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

وهذا أمر غريب لأنني أستطيع رؤية تفاصيل المستخدمين المحددين يتم تمريرها إلى ViewModel، ومع ذلك، لا تقوم واجهة المستخدم بتحديث عنوان البريد الإلكتروني أبدًا.

أعتذر عن هذا المنشور الطويل ولكني أردت تقديم أكبر قدر ممكن من التفاصيل في محاولة لإصلاح هذا الأمر حيث أنني أعمل على هذا منذ أكثر من يوم الآن دون أي نجاح.

أي مساعدة سيكون موضع تقدير حقا.

شكرًا.

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

المحلول

بقدر ما أستطيع أن أرى أنك لا تستخدم الخاص بك $.ajax نتيجة المكالمة في أي مكان.ما عليك سوى إظهار التنبيه ويتم ذلك.تحتاج إلى استخدام البيانات في النتيجة، ولكن عندما تعود بالكامل View وليس فقط أ PartialView ربما يكون من الأفضل إعادة التوجيه عند تغيير القائمة المنسدلة:

$("#UserID").change(function()
    window.location.href = "/Dashboard/Index/" + $(this).val();
);

تستطيع ايضا استخذام @Url.Action("Index", "Dashboard") لتجنب عنوان URL الثابت.

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