2013-01-04 39 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