2013-01-04 64 views
1

我已經使用kendo網格來顯示從控制器收集的電子郵件列表,然後當用戶點擊網格行時,電子郵件正文顯示在劍道編輯器中,我想在編輯器上編輯電子郵件並使用Web服務將電子郵件正文保存回數據庫。但是爲了與服務器端的c#代碼交互,並不是那麼簡單。我們不想要太多的Javascript代碼。當前的代碼就是這樣使用Kendo UI的.NET開發人員的HTML5 ASP .NET MVC

__ _ __的Index.aspx

<%: Html.Kendo().Grid(Model.mailList) 
     .Name("Grid") 
        .HtmlAttributes(new { style = "height:auto;font-size: medium;" }) 
     .Columns(columns => 
     { 
      columns.Bound(p => p.MailId).Width(200); 
      columns.Bound(p => p.From.Value).Width(200).Title("Sender"); 
      columns.Bound(p => p.Subject).Width(200); 
      //columns.command(commands => 
      //{ 
      // commands.destroy(); 
      //}); 

     }) 
     .Pageable() 
     .Sortable() 
     .Scrollable() 
     .Filterable() 

     .Events(events => events.Change("onChange")) 

     .DataSource(dataSource => dataSource 
      .Ajax() 
      .ServerOperation(false) 
      //.Destroy(destroy => destroy.Action("Index","Home")) 
      .Model(model => 
      { 
       //The unique identifier (primary key) of the model is the ProductID property 
       model.Id(p => p.MailId); 

       // Declare a model field and optionally specify its default value (used when a new model instance is created) 
       model.Field(p => p.Subject).DefaultValue("N/A"); 

       // Declare a model field and make it readonly 
       model.Field(p => p.Sender).Editable(false); 
      })        

      .PageSize(5)   
      ) 
      .Selectable() 

%> 

function sendMailToController() { 
     $.ajax({ 
      url: "/Home/SendMail/", 
      data: { 
       emailID: mailID, 
       emailBody: mailBody 

      }, 
      cache: false, 
      type: "GET", 
      timeout: 10000, 
      dataType: "json", 
      success: function (result) { 
       if (result.Success) { 
        alert("Operation Completed"); 
       } else { 
        alert("Operation Failed"); 
       } 
      } 
     }); 
    } 

__ _ __ _controller代碼

public ActionResult Index() 
     { 

      MailModel mailModelobj = new MailModel(); 
      mailModelobj.GetMailList(); 
      return View(mailModelobj); 


     } 

public JsonResult SendMail(Guid emailID, string emailBody) 
     { 
      MailModel mailModelObj = new MailModel(); 
      mailModelObj.body = emailBody; 
      mailModelObj.mailID = emailID; 
      var Result = mailModelObj.SendMail(mailModelObj); 

      return Json(new { Success = true, Result }, JsonRequestBehavior.AllowGet); 
     } 

問題是,它不是 爲編輯長篇郵件正文部分工作。我們不喜歡上面的溝通方式。

我們想在Javascript中使用C#域名。

我的問題是:

  1. 什麼是劍道UI控件與服務器端進行交互的最佳實踐(得到控制值,並通過控制器設置的值

  2. 你能嗎?請用一些小例子來解釋一下,例如提交按鈕,以便將電子郵件正文提交回服務器。

  3. 是否可以使用kendo UI進行測試驅動開發?如何或示例會非常有幫助。

在此先感謝..

回答

1

的問題是,它不工作從編輯長長的電子郵件,正文部分。 我們不喜歡上面的溝通方式。

使用POST而不是GET:

[HttPost] 
public JsonResult SendMail(Guid emailID, string emailBody) 
{ 
    ... 
} 


$.ajax({ 
     url: "/Home/SendMail/", (you should use Url.Action here) 
     type: "POST", 
     data: { 
      emailID: mailID, 
      emailBody: mailBody 

     }, 
     cache: false, 
     timeout: 10000, 
     dataType: "json", 
     success: function (result) { 
      if (result.Success) { 
       alert("Operation Completed"); 
      } else { 
       alert("Operation Failed"); 
      } 
     } 
    }); 

什麼是劍道UI 控制與服務器端進行交互的最佳實踐(得到控制值,並通過 控制器設置的值?

從我的經驗來看,這是一個很好的方法(使用AJAX請求)

+0

嗨,感謝您的快速回復..更改爲POST它工作:)使用ajax的方法,有什麼辦法發送一個完整的對象(具有多個屬性的郵件對象)而不是emailID,emailBody? – Shantu

+0

@JohnSohn是的,它絕對可以發送一個完整的對象。例如,請參閱http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx。 – ken2k

+0

嗨,我剛剛看到,現在它可以發送簡單的字符串長的郵件正文..但HTML格式的郵件正文不起作用。沒有AJAX呼叫正在發射.. – Shantu