كيفية تمرير كائن تعديل unpersisted من طريقة العرض إلى تحكم بدون شكل؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

القصيرة:؟ كيف modelbinding الأجسام تمريرة من عرض إلى وحدة تحكم

طويل:
أولا، استنادا إلى معايير معينة من قبل المستخدم من خلال نموذج البحث، يتم استرداد بعض الكائنات من قاعدة البيانات. وتعطى هذه الكائنات بيانات التعريف التي هي واضحة (ولكن لا تحديد) للعميل. (على سبيل المثال: تسمية وتسعير الكائنات تختلف من منطقة إلى أخرى)
في وقت لاحق في الموقع، يمكن للمستخدم النقر الروابط التي ينبغي أن تظهر تفاصيل هذه الكائنات. لأن هذه البيانات الفوقية مهمة لعرض، ولكن عدم تحديد، ولست بحاجة للحصول على وجوه تتغير سابقا مرة أخرى في وحدة تحكم. عندما استعمل asp.net الافتراضي MVC modelbinding، يتم استخدام طريقة .ToString (). هذا عن مسارها لا يرجع سلسلة ذات الصلة لإعادة الكائن الكامل.
وأود أن برزت سوف تشارك واجهة ISerializable، ولكن الأمر ليس كذلك. كيف يجب أن أذهب وشك الحصول على النتيجة المرجوة؟ لا أستطيع أن أتخيل أنا أول واحد أن يواجه هذا السؤال، لذا أعتقد أنا في عداد المفقودين شيئا في مكان ما ...

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

المحلول

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

ويمكنك أن تبحث في الواقع في (والتحميل) مصدر لهذا على http://www.codeplex.com / ASPNET ، على الرغم من أن سيكون لديك لأسفل في مصدر MVC من هناك. انا اعطي رابط لمصدر DefaultModelBinder، ولكن الطريقة التي يتم بنائها، وأعتقد أن التغييرات الارتباط كما يتم إدخال تعديلات.

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

[تحرير] وردا على مشاركتك الثانية:

ودعونا نقول أننا نريد أن يكون وصلة الى هذا العمل الذي يستخدم كائن مخصص. يمكننا تخزين الكائن مخصصة في TempData (أو الدورة إذا كنا بحاجة إلى أن تستمر أكثر من خلال إعادة النشر أكثر من واحد) مع مفتاح معين. يمكننا بعد ذلك بناء على رابط العمل وتوفير مفتاح الكائن كقيمة لActionLink في فئة مجهولة. هذا وسوف تمر يعود المفتاح كما طلب المعلمة. في عملنا يمكننا استخدام المفتاح من هذه المعلمة لاسترداد الكائن من TempData.

<%= Html.ActionLink( ViewData["CustomObject1",
                     "Select",
                     new { TempDataKey = ViewData["CustomObject1_Key"] }
                   ) %>
&nbsp;

public ActionResult Select()
{
    Entity custObj = null;
    string objKey = Request.Params["TempDataKey"];
    if (!string.IsNullOrEmpty(objKey))
    {
       custObj = (Entity)TempData[objKey];
    }

    ... continue processing
}

نصائح أخرى

وtvanfosson

وشكرا لتفسيركم، ولكن ماذا عن الروابط؟ (أي أشكال وشملت) حاليا Html.ActionLink (ج => c.Action (المعلمة)، "تسمية") يأخذ الأشياء كمعلمة. هذه يجب أن تترجم إلى أجزاء URL. لهذا، MVC يذهب دائما إلى أسلوب .ToString (). أنا لا أريد أن تسلسل الكائن بلدي في أسلوب ToString.
لا ينبغي أن يكون كنت قادرا على مساعدة بطريقة أو بأخرى إطار تسلسل الكائن الخاص بي؟ أقول من خلال واجهة ISerialize أو شيء من هذا؟

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