我有一个SilverLight按钮,它可以从文本框中获取注释以保存在我的数据库中,然后关闭窗口。将数据从SilverLight发送到MVC控制器的间歇性功能
的SilverLight:
Task task = new Task();
private void saveChangeBtn_Click(object sender, RoutedEventArgs e)
{
string commentTxtBxValue = commentTxtBx.Text;
task.SaveComment(commentTxtBx.Text);
commentTxtBx.Text = commentTxtBxValue;
HtmlPage.Window.Invoke("closeWindow", null);
}
Silverlight的调用我的Silverlight项目中它创建了一个URI,并使用这个URI模式SaveComment()
,它发送注释文本到我的MVC控制器。
型号代码:
public void SaveComment(string Comment)
{
// Create post string
StringBuilder postData = new StringBuilder();
postData.AppendFormat("?{0}={1}", "id", this.PageBreakId);
postData.AppendFormat("&{0}={1}", "comment", Comment);
string dataString = postData.ToString();
byte[] data = Encoding.UTF8.GetBytes(dataString);
// Configure client
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.UploadStringCompleted += new UploadStringCompletedEventHandler(client_UploadStringCompleted);
string baseUri = HtmlPage.Document.DocumentUri.ToString().ToLower();
baseUri = baseUri.Substring(0, baseUri.IndexOf("currentPage"));
Uri uri = new Uri(baseUri + "SaveComment", UriKind.Absolute);
try
{
// Start upload
client.UploadStringAsync(uri, dataString);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
}
}
最后,我的MVC控制器将其保存到数据库中。
MVC控制器:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveComment()
{
//Save to Database
}
我的问题是,现在看来,我的Silverlight的代码HtmlPage.Window.Invoke("closeWindow", null);
关闭页面结束代码执行它有机会完成之前。如果我在我的MVC控制器上放置一个断点,它只会有时被触发。我注意到FireFox几乎总是会打到它,但IE8几乎从未打过它。
在关闭页面之前,我可以做些什么来确保我的代码完成?
谢谢
亚伦
你是不是指UploadStringCompleted事件? – 2010-09-23 14:44:05