Получить содержащий экземпляр объекта из ModelMetadataProvider в ASP.NET MVC

Реализация пользовательского DataAnnotationsModelMetadataProvider в ASP.NET MVC2.

Предполагая, что объект который обрабатывается, выглядит следующим образом:

- Contact : IUpdateable
   - Name: string
   - ContactType: (Lead, Prospect, Customer)

, а метод ниже находится в контексте Contact.ContactType , что означает, что:

  • meta.PropertyName == "

    Я использую 16-байтовый двоичный uuid в качестве первичного ключа для таблицы и имею средний блок, содержащий сжатую zlib-информацию json.

    Я использую следующую схему:

    CREATE TABLE repositories (
        added_id int auto_increment not null,
        id binary(16) not null,
        data mediumblob not null,
        create_date int not null,
        update_date int not null,
        PRIMARY KEY (added_id),
        UNIQUE(id)
    ) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ENGINE=InnoDB;
    

    Затем я создаю новую строку в таблица, используя следующий код:

    data = zlib.compress(json.dumps({'hello':'how are you :D'})
    row_id = uuid.uuid(4).hex
    added_id = cursor.execute('
        INSERT INTO repositories (id, data, create_date, update_date) 
        VALUES (%s, %s, %s, %s)',
        binascii.a2b_hex(row_id), 
        data, 
        time.time(), 
        time.time()
    )
    

    Затем для получения данных я использую аналогичный запрос:

    query = cursor.execute('SELECT added_id, id, data, create_date, update_date ' \
        'FROM repositories WHERE id = %s',
        binascii.a2b_hex(row_id)
    )
    

    Затем запрос возвращает пустой результат.

    Любая помощь будет принята с благодарностью. Кроме того, в стороне, что лучше хранить даты эпох unix в виде целых чисел или TIMESTAMP?

    ПРИМЕЧАНИЕ: У меня нет проблем с вставкой данных, я просто пытаюсь получить их из базы данных. Строка существует, когда я проверяю через mysqlclient.

    Спасибо

    query = cursor.execute('SELECT added_id, id, data, create_date, update_date ' \
        'FROM repositories WHERE id = %s',
        binascii.a2b_hex(row_id)
    )
    

    Затем запрос возвращает пустой результат.

    Любая помощь приветствуется. Кроме того, в сторону, что лучше хранить даты эпох unix в виде целых чисел или TIMESTAMP?

    ПРИМЕЧАНИЕ: У меня нет проблем с вставкой данных, я просто пытаюсь получить их из базы данных. Строка существует, когда я проверяю через mysqlclient.

    Спасибо

    query = cursor.execute('SELECT added_id, id, data, create_date, update_date ' \
        'FROM repositories WHERE id = %s',
        binascii.a2b_hex(row_id)
    )
    

    Тогда запрос возвращает пустой результат.

    Любая помощь приветствуется. Кроме того, в сторону, что лучше хранить даты эпох unix в виде целых чисел или TIMESTAMP?

    ПРИМЕЧАНИЕ: У меня нет проблем с вставкой данных, я просто пытаюсь получить их из базы данных. Строка существует, когда я проверяю через mysqlclient.

    СпасибоМного!@Атрибуты minBoundX

    и .minBoundY Я объясняю, как я хотел бы их установить; однако она не работает, потому что функция findPos () не работает.

    Вот функция findPos ():

    function findPos(obj) { // Donated by `lwburk` on StackOverflow
        var curleft = curtop = 0;
        if (obj.offsetParent) {
            do {
                curleft += obj.offsetLeft;
                curtop += obj.offsetTop;
            } while (obj = obj.offsetParent);
            return { x: curleft, y: curtop };
        }
    }
    

    Я считаю, что эта функция работает, если ограничивающий элемент имеет ] position: absolute; установлен, но я хочу, чтобы пользователь мог установить свой тип позиционирования. Кроме того, ограничивающий элемент устанавливается классом .bound , а dragObj задается классом .drag .

    Вот HTML:

    Hello World!

    One

    Two

    А вот CSS:

    @charset "utf-8";
    /* CSS Document */
    
    
    * {
        padding: 0px;
        margin: 0px;
    }
    
    body {
        background-color:#DFDFDF;
    }
    
    .drag {
        position: absolute;
        -webkit-user-select: none;
        -moz-user-select: none;
        user-select: none;
    }
    
    .bound {
        ;
    }
    
    .square {
        width: 100px;
        height: 100px;
        background: #1047A9;
        cursor:move;
        border-radius: 25px;
        -moz-border-radius: 25px;
    }
    
    #center {
        width: 500px;
        margin: auto;
        margin-top: 50px;
        background-color: #29477F;
        color: #E8E8E8;
        text-align: center;
        border-radius: 25px;
        -moz-border-radius: 25px;
    }
    
    #box {
        background-color: #009EBE;
        height: 275px;
        border-radius: 0 0 25px 25px;
        -moz-border-radius: 0 0 25px 25px;
        opacity: 1.0;
    }
    
    .helper-box {
        position: absolute;
        width: 5px;
        height: 5px;
    }    
    

    А вот весь движок:

    // JavaScript Document
    
    var dragObj;
    
    document.addEventListener("mousedown", down, false);
    
    function down(event) {
        if(~event.target.className.search(/drag/)) {
            dragObj = makeObj(event);
            dragObj.element.style.zIndex="100";
            document.addEventListener("mousemove", freeMovement, false);
        }
    }
    
    function freeMovement(event) {
    
        if (typeof(dragObj.element.mouseup) == "undefined")
            document.addEventListener("mouseup", drop, false);
        //Prevents redundantly adding the same event handler repeatedly
    
        dragObj.element.style.left = Math.max(dragObj.maxBoundX, Math.min(dragObj.minBoundX, event.clientX - dragObj.posX)) + "px";
        dragObj.element.style.top = Math.max(dragObj.maxBoundY, Math.min(dragObj.minBoundY, event.clientY - dragObj.posY)) + "px";
    }
    
    function drop() {
        dragObj.element.style.zIndex="1";
    
        document.removeEventListener("mousemove", freeMovement, false);
        document.removeEventListener("mouseup", drop, false);
        //alert("DEBUG_DROP");
    }
    
    
    function makeObj(event) {
        var obj = new Object();
        var e = event.target;
    
        obj.element = e;
        obj.boundElement = null;
    
        while(e = e.parentNode) {
            if(~e.className.search(/bound/)) { //if(/bound/.test(e.className)) {
                obj.boundElement = e;
                break;
            }
        }
    
        if(obj.boundElement == null)
            obj.boundElement = document.body;
    
    
        // I would like to find the correct minimum bounds with findPos(); however, I need
        // findPos() to work with every type of positioning (absolute, relatice, ect.)
    
        //var elemPos = findPos(obj.boundElement);
        //obj.minBoundX = elemPos.x;
        //obj.minBoundY = elemPos.y;
    
        obj.minBoundX = obj.boundElement.offsetLeft + obj.boundElement.offsetWidth - obj.element.offsetWidth;
        obj.minBoundY = obj.boundElement.offsetTop + obj.boundElement.offsetHeight - obj.element.offsetHeight;
    
        obj.maxBoundX = obj.boundElement.offsetLeft;
        obj.maxBoundY = obj.boundElement.offsetTop;
    
        setHelperBoxPos(obj);
    
        obj.posX = event.clientX - obj.element.offsetLeft;
        obj.posY = event.clientY - obj.element.offsetTop;
    
        return obj;
    }
    
    function findPos(obj) { // Donated by `lwburk` on StackOverflow
        var curleft = curtop = 0;
        if (obj.offsetParent) {
            do {
                curleft += obj.offsetLeft;
                curtop += obj.offsetTop;
            } while (obj = obj.offsetParent);
            return { x: curleft, y: curtop };
        }
    }
    
        function setHelperBoxPos(obj) {
            var minBox = document.getElementById('min');
            minBox.style.left = obj.minBoundX + 'px';
            minBox.style.top = obj.minBoundY + 'px';
    
            var maxBox = document.getElementById('max');
            maxBox.style.left = obj.maxBoundX + 'px';
            maxBox.style.top = obj.maxBoundY + 'px';
        }
    

    Я также сделал jsfiddle для вашего удобства: http://jsfiddle.net/2XGhK/

    Итак, как я делаю функцию findPos (), которая допускает различные виды позиционирования. Придется ли мне делать еще одну функцию findPos (), чтобы перетаскивание могло также выполнять любое позиционирование?

    Важно Пожалуйста, не рекомендуйте использовать библиотеку (если вы не предложите посмотреть в ней советы о том, как они работают Причина в том, что я просто изучаю язык, и создание вещей помогает мне в этом. Какой смысл изучать библиотеку до того, как я пойму язык?

    Самое главное, я очень ценю вашу помощь. Спасибо.

8
задан Dbz 9 March 2011 в 03:46
поделиться