سؤال

أحاول استخدام JQuery's $ .getjson للوصول إلى بيانات نموذجية من وحدة التحكم، وبناء كائن JSON في JavaScript لاستخدامه حيث يضيف المستخدم ويزيل العناصر من قائمة. يتم جميع js في ملف خارجي. يتم الضغط على الخادم لبيانات النموذج مرة واحدة فقط بعد تحميل الصفحة أولا حتى أتمكن من الحصول على قائمة خيارات كاملة للمستخدم للاختيار من بينها. بعد ذلك، يمكن للمستخدم تعديل القائمة بقدر ما يريد (ويتم تحديث كائن JSON وفقا لذلك)، ثم قم بإحفظه (يتم كتابته مرة أخرى إلى DB).

ولكن هنا مشكلتي: عند استخدام $ .getjson، تحتاج الطريقة التي أحتاج إليها إلى الاتصال بها إلى وحدة تحكم معرف بحيث يمكنه البحث عن مورد معين الذي أتحدث عنه واستراد قائمة الخيارات التي تتعلق بهذا المورد المحدد وبعد ولكن من ملف JS الخارجي، لا أعرف كيفية الحصول على هذا المعرف للمرور إلى وحدة التحكم. إنه مبني في الرابط الذي يفتح الصفحة في المقام الأول، ويجلس في عنوان URL، ولكن بمجرد تحميل الصفحة، لا أعرف كيفية الحصول على هذا المعرف من أجل تمريره إلى وحدة التحكم. لقد قمت بلصق بعض الكود أدناه، لأنني أعرف أن هذا مربك:

تفاصيل التفاصيل في وحدة التحكم التي تقوم بتحميل الصفحة في البداية (تأخذ روايا لمعرفة ما يجب تحميله):

public ActionResult Details(string resId)
{
    //call base method
    base.Details(resId, resourceType);
    Evaluation eval = (Evaluation)this.Model;
    ViewData.Model = eval;
    return View("Index");
}

في ملف JS الخارجي الخاص بي، أفعل هذا:

$.getJSON("/Evaluation/PopulateJournalOptions/" + id, populateJSON);

وفي وحدة التحكم، كتبت طريقة أخرى تسمى populatejournaloptions التي تسمى لبناء كائن JSON:

public JsonResult PopulateJournalOptions(string resId)
{
   JournalOptionsResult jsonResult = new JournalOptionsResult();

   base.Details(resId, resourceType);
   Evaluation eval = (Evaluation)this.Model;

   jsonResult.Activities = eval.Journal.Activities;
   jsonResult.Issues = eval.Journal.Issues;
   jsonResult.ScheduledActions = eval.Journal.ScheduledActions;

   return Json(jsonResult);
}

مرة أخرى، مشكلتي هي أنه بمجرد تحميل الصفحة، ليس لدي إمكانية الوصول إلى المعرف الذي أحتاجه لتمريره إلى PopulateJournalOptions. لقد حاولت فقط عدم اجتياز أي شيء للملء الصحون، وإنشاء كائن جديد هناك وإعداده يساوي (Evaluation)this.Model, ، ولكن يبدو أن هذا. يبدو أنه فارغ، ربما لأنه مثيل جديد لوحدة التحكم بمجرد استدعاء من JS. لذلك أنا عالق هنا. أيه أفكار؟

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

المحلول

هل فكرت في وضع المعرف في حقل مخفي على الصفحة ثم بعد قراءة JavaScript الخاص بك المعرف من الحقل؟

$.getJSON("/Evaluation/PopulateJournalOptions/" + $('#Id').attr('value'), populateJSON);

ثم، في رأيك،

<%= Html.Hidden("Id") %>

مع النموذج الخاص بك وجود مطلوب Id كملكية

نصائح أخرى

ضع هذا في وحدة التحكم:

ViewData["resouceID"] = resouceID;

ضع هذا في الرأي الذي الأحمال في البداية:

<script>
$(document).ready(function() {
    $.getJSON("<%=Url.Action("YourActionName", "YourControllerName", new {id = ViewData["resouceID"]}) %>", populateJSON);
});
</script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top