سؤال

أول وظيفة بعد،

لقد كنت ألعب مع MVC Abit ... لدي عرض له حقول مدخلات متعددة، يمكن أن تكون بعض هذه الحقول فارغة في المشاركة.

طريقة العمل داخل وحدة تحكم للمشاهدة تبدو مثل هذا

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

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

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

كل شيء يبدو سيئا قليلا في التعليمات البرمجية لأن أؤدي إلى تعيين خصائص كائن البحث و Viewdatas.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

}

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

آسف إذا كان هذا يبدو تفريغ، وليس خصوصا للأشخاص لترتد الأفكار والوقت للحفر في الإطار.

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

المحلول

وفقا ل Snippet MemberViewData Class لديه خاصية النتائج بالإضافة إلى خصائص فئة البحث. ستكون الخطوة الأولى هي جعل MemberViewData مشتق من البحث وتحديد منشئ يقبل مثيل البحث كمعلمة وتعيين خصائصها الأساسية منه. التالي سأغير طريقة العمل مثل ذلك:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}

نصائح أخرى

استخدام modelbinder لربط البيانات

مثل Tadeusz المذكورة، يمكن أن يساعد ModelBinder في بناء MemberViewData لك، والتي ستترك فقط النتائج التي سيتم إجراؤها.

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

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