سؤال

لدي نموذج مشابه لهذا:

public class myModel 
{
    public ClassA ObjectA {get; set;}
    public ClassB ObjectB {get; set;}
}

في وجهة نظري الرئيسية ، لدي علامات مشابهة لهذا:

<div id="section1">
    <%=Html.EditorFor(m => m.ObjectA)%>
</div>
<div id="section2">
    <%=Html.EditorFor(m => m.ObjectB)%>
</div>

Classa و ClassB على حد سواء قوالب المحرر المحددة.

لقد قمت بإنشاء بعض JavaScript التي تقوم بإجراء مكالمة Ajax لإعادة تحميل Section1 Div. أريد طريقة الإجراء لإرجاع المحرر لـ Objecta ، classa.ascx الموجود في مجلد EditorTemplates.

لدي ما يلي في طريقة الإجراء الخاصة بي:

public ActionResult GetData(int input) 
{
    // Process input here and create modelData

    return PartialView("ClassA", modelData);
}

هذا يعطي خطأ لأنه لا يمكن العثور على عرض classa.

كان الحل الخاص بي هو إنشاء عرض جزئي في مجلد العرض الذي يسمى "GetData" وإعادتي تجعل عرض GetData. يحتوي عرض GetData على سطر واحد فقط من التعليمات البرمجية:

<%=Html.RenderForModel()%>

هذا يعمل ، لكنني كنت أتساءل عما إذا كانت هناك طريقة لأسلوب العمل للعودة والقالب المحرر؟

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

المحلول

return PartialView("~/EditorTemplates/ClassA.ascx", modelData);

نصائح أخرى

نقاط المكافأة لتغليف الهدايا:

public class CustomControllerBase : Controller
{
    public PartialViewResult EditorFor<TModel>(TModel model)
    {
        return PartialView("EditorTemplates/" + typeof(TModel).Name, model);
    }

    public PartialViewResult DisplayFor<TModel>(TModel model)
    {
        return PartialView("DisplayTemplates/" + typeof(TModel).Name, model);
    }
}

اطلب من وحدة التحكم (تسمى ، على سبيل المثال ، myController) أن ترث من CustomControllerBase ، ثم:

public ActionResult MyAction(int id)
{
    return EditorFor(new MyViewModel(id));
}

سوف يبحث الرمز عن "~/views/myController/editortemplates/myViewModel.ascx".

هذا عمل بالنسبة لي (MVC 4)

public ActionResult GetData(int input) 
{
    // Process input here and create modelData

    return PartialView("EditorTemplates/ClassA", modelData);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top