Как мне опубликовать переменную javascript в ASP.net Модель MVC?

#javascript #jquery #asp.net-mvc-3 #yui

#javascript #jquery #asp.net-mvc-3 #yui

Вопрос:

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

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

Заголовок Body Дата создания 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 распознал ее?

Ответ №1:

Вы не можете сделать это в своем представлении MVC. Вам нужно сделать это на javascript.

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

 $('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()   'amp;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);
}); 
  

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

Комментарии:

1. Пошел вторым путем. Спасибо!

Ответ №2:

Напишите какой-нибудь 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.
}