سؤال

ولدي "تحرير" العمل و "تحرير" بغية السماح للمستخدمين بتحديث كيان معين في قاعدة البيانات.

وانها نوع قاعدة البيانات هو "XML"، وDataContext (أنا باستخدام ينق إلى SQL) يمثله كخاصية من نوع "XElement".

في رأيي، وأنا تجعل النص المنطقة من "ToString ()" إخراج بربري مثل هذا:

<%= Html.TextArea("Text", Model.Text.ToString()) %>

وهذا يعمل بشكل جيد عندما سحب البيانات من وجوه، ولكن عندما أحاول إضافة البيانات الجديدة إلى الوراء، فإنه يعود فارغ كما.

وأعتقد أن هذا هو لأن لصناعة السيارات في الموثق لا يعرف كيفية التعامل مع خاصية من نوع XElement.

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

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

المحلول

ويمكنك كتابة الموثق مخصصة لهذه التي تطبق في IModelBinder اجهة. يمكنك تسجيل هذا الموثق على طريقة نفسه:

public ActionResult Edit([ModelBinder(typeof(XElementBinder))] XElement element)
{ ... }

وأو على الصعيد العالمي لجميع لXElement في التطبيق الخاص بك عن طريق registereing الموثق الخاص بك في Global.asax:

ModelBinders.Binders[typeof(IPrincipal)] = new PrincipalModelBinder();

وسوف الموثق عهدك ننظر بشيء من هذا القبيل:

public class XElementModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext,
                            ModelBindingContext bindingContext)
    {
        string text = controllerContext.HttpContext.Request.Form["Text"];
        XElement element = ...;
        // Get XElement instance from posted data.
        return element;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top