Как опубликовать переменную javascript в модели ASP.net MVC? - PullRequest
2 голосов
/ 31 мая 2011

Я пытаюсь использовать текстовый редактор Yahoo в моем веб-приложении.Я новичок в веб-программировании, так что это может быть глупым вопросом.

Я использую пользовательскую модель под названием "blogpost".Он содержит следующие свойства:

Заголовок Body DateCreated Author

Я хочу использовать пользовательский редактор только для свойства "body".Когда я нажимаю «Отправить», он строит другие свойства модели из простых текстовых полей.Я поместил следующий код в мой код формы ввода.

<div class="yui-skin-sam">
        <textarea name= "msgpost" id="msgpost" cols="50" rows="10">
        </textarea>
        <script>

            var myEditor = new YAHOO.widget.Editor('msgpost', {
            height: '300px',
            width: '522px',
            dompath: true, //Turns on the bar at the bottom
            animate: true //Animates the opening, closing and moving of Editor windows
            });

            myEditor.render();

            YAHOO.util.Event.on('Create', 'click', function () {
                myEditor.saveHTML();
                var body = myEditor.get('element').value;

            });                              
        </script>
        @ViewData.Add("Body",//how do I add the javascript variable "body" ?)


</div>

Как мне "опубликовать" переменную javascript "body", чтобы конструктор моделей MVC распознал ее?

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Вы не можете сделать это в вашем MVC View.Вам нужно сделать это в javascript.

Вам нужно будет перехватить событие Submit в форме, а затем получить значение текста в редакторе и добавить его в данные публикации.Что-то вроде:

$('form').submit(function(event){
    // cancel the default action
    event.preventDefault();
    var body = escape(myEditor.get('element').value);

    var theForm = $(this);
    $.post(theForm.attr('action'), theForm.serialize() + '&body=' + body, function (data) {
        // do whatever with the result
    });
});

Другой способ сделать это - добавить скрытое поле в форму и обновить это поле значением редактора:

<input id="body" name="body" type="hidden" value=""/>

, затем вместоустановив переменную body, вы можете сделать это:

YAHOO.util.Event.on('Create', 'click', function () {
    myEditor.saveHTML();
    $('#body').attr('value', myEditor.get('element').value);
}); 

Тогда данные будут в форме, а форма обработает все остальное.

0 голосов
/ 31 мая 2011

Напишите некоторый javascript для сохранения содержимого редактора в скрытый ввод и опубликуйте его с помощью формы.После этого вы сможете получить доступ к содержимому в действии контроллера MVC, используя editorBodyText в качестве строкового параметра.

Например, Javascript и HTML:

<script type="text/javascript" >
   $(document).ready(
        function () {
             $("#submitButton").click( 
                 function(){ 
                        $("#editorBodyText").val(myEditor.get('element').value);
                 }
             );
        }
   );
</script>

<input id="editorBodyText" name="editorBodyText" type="hidden" value=""/>
<input id="submitButton" type="submit" value="save" />

Контроллер MVC:

public ActionResult HandlePost(string editorBodyText){
 //TODO: process your data here e.g. save to DB.
}
...