Проблема Jeditable в монорельсе замка - PullRequest
1 голос
/ 09 октября 2010

Я пытаюсь использовать Jeditables (http://www.appelsiini.net/projects/jeditable) в моем первом замковом монорельсовом приложении MVC

Мне удалось отобразить текстовое поле и вызов ajax, моя проблема в том, что после вызова ajax измененный текст не возвращается, и я не могу получить ответ после вызова

это моя страница

<head>
 <link href="../../Styles/Main.css" rel="stylesheet" type="text/css" />
    <script src="../../JavaScript/jQuery1.4.2.js" type="text/javascript"></script>
    <script src="../../JavaScript/EditInLine.js" type="text/javascript"></script>

 <script type="text/javascript">
  $(document).ready(function() {
   $('.editable').editable('/Home/Save', { 
        id        : 'editableId',
           name    : 'editableText',
     type      : 'textarea',
     cancel    : 'Cancel',
     submit    : 'OK',
     indicator : '<img src="img/indicator.gif">',
     tooltip   : 'Click to edit...',
     width     : '200',
     style     : 'display: inline',
     callbac   : function(value, settings) {
        alert(value);  
      return value;
    }

    });
  });
 </script>

</head>
<body>    


<label id='1' class='editable '>Some text</label>


</body>
</html>

а это мой контроллер

using Castle.MonoRail.Framework;
using System;
using EditInLine.Model.Interfaces;
using EditInLine.Model;

namespace EditInLine.Controllers
{
    [Layout("Default"), Rescue("Default")]
    public class HomeController : SmartDispatcherController
    {
        private EditableElement editableElement;
        private EditableElement EditableElement
        {
            get
            {
                if (Session["EditableElement"] == null)
                {
                    Session["EditableElement"] = new EditableElement { Id = 1, Text = "Some text", CssClass = "editable" };
                }
                return (EditableElement)Session["EditableElement"];
            }            
        }


        public void Index()
        {
            PropertyBag["IsAdmin"] = true;
            PropertyBag["element"] = EditableElement;
        }

        public void Save()
        {
            var elementId = Convert.ToInt32(Request.Form["editableId"]);
            var text = Request.Form["editableText"];  

            var element = new EditableElement { Id = elementId, CssClass = "editable", Text = text };

            Session["EditableElement"] = element;            

        }


    }
}

спасибо за помощь

Ответы [ 2 ]

1 голос
/ 09 октября 2010

Проблема с Save() заключалась в том, что вы не вернули строку в браузер. Легко фиксируется с помощью RenderText() звонка. Вы также должны использовать привязку параметров вместо того, чтобы связываться с Request.Form:

public void Save(int editableId, string editableText)
{
    var element = new EditableElement { Id = editableId, CssClass = "editable", Text = editableText};

    Session["EditableElement"] = element;

    RenderText(editableText);
}
0 голосов
/ 09 октября 2010

Я нашел решение

public void Save()
        {
            var elementId = Convert.ToInt32(Request.Form["editableId"]);
            var text = Request.Form["editableText"];  

            var element = new EditableElement { Id = elementId, CssClass = "editable", Text = text };

            Session["EditableElement"] = element;            

 Response.Write(text);
 CancelView();
        }
...