2010-10-08 25 views
1

Je suis en train d'utiliser Jeditables (http://www.appelsiini.net/projects/jeditable) dans mon premier monorail château demande mvcproblème Jeditable dans monorail château

je réussi à avoir apparaître la zone de texte et à la l'appel ajax, mon problème est maintenant que, après les ajax appeler les returs de texte modifié ne change et je ne peux pas obtenir la réponse après l'appel

ceci est ma page

<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> 

et que mon contrôleur

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;    

     } 


    } 
} 

Merci pour vous aider à

Répondre

0

J'ai trouvé la solution

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(); 
     } 
+0

vous pouvez vous rendre la vie plus facile en utilisant la liaison de paramètre. Le 'Save()' méthode pourrait ressembler à ceci: –

+0

'public void Save (int editableId, chaîne editableText) { session [ "EditableElement"] = new EditableElement ... }' –

+0

et changer la 'Response.Write 'avec' RenderText' qui annule la vue –

1

Le problème avec Save() était que vous ne retournez pas une chaîne dans le navigateur. Facilement corrigé avec l'appel RenderText(). Vous devez également être en utilisant la liaison de paramètre au lieu de vous embêter avec Request.Form:

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

    Session["EditableElement"] = element; 

    RenderText(editableText); 
}