我正在将 ASP.net MVC 3 用于一个项目,现在我对它有了更多的了解,但也试图了解它与我使用了这么久的 WebForms 世界之间的差异。以前在 WebForms 中,您只需将字段放在那里,添加一个按钮并创建一个事件,然后使用回发处理您需要的任何内容。
例如,我有一个显示错误详细信息的简单视图。我想将有关此错误的一些信息推送到我们的问题跟踪器的 API。让我们只说错误的主题和内容。我会在 HTML 中做类似的事情:
<form action="@Url.Action("Send")" method="post">
<input id="subject" name="subject" type="text" value="@Model.subject" />
<br />
<input id="content" name="content" type="text" value="@Model.content" />
<br />
<input type="submit" value="Send" />
</form>
我发现命名我的输入 ID 以匹配我的控制器中的参数名称然后让我传递这些参数。这类似于您在Scott Guthrie的这篇较早的帖子中看到的内容。
首先,我想在我的错误控制器中调用“发送”操作,而不是我的详细信息。这实际上确实调用了我的“发送”操作,但随后重定向到 localhost/Errors/Send,这是我不希望的。
我希望能够提交此表单,该表单调用和操作并使用远程 API 完成工作,然后在当前页面上更新一条消息,说明错误已被转移。
将问题提交给错误跟踪器后,我该如何在原始页面上显示一个 DIV,将内容传回给它(例如,指向问题跟踪器中问题的链接)?
更新:这是我在控制器中所做的:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/redmine/issues.json");
request.Credentials = new NetworkCredential("username", "password");
request.Method = "POST";
request.ContentType = "application/json";
request.Accept = "application/json";
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write("'issue': { " +
"'project_id': 'project', " +
"'subject': 'Test issue'" +
"}");
}
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
string json = "";
using (StreamReader reader = new StreamReader(stream))
{
json = reader.ReadToEnd();
}
另外,这是我在我看来正在做的事情(简化,在菲利普的帮助下)
@model webapp.Models.app_errors
<script type="text/javascript">
function SendErrors() {
alert(@Model); // here I get a 'webapp undefined error'
alert(Model); // Model is undefined. If I reference @Model.App_name or another value anywhere, works fine in rest of view
$.ajax({
type: 'POST', //(probably)
url: '../SendToRedmine',
cache: false, //(probably)
dataType: 'json', //(probably)
data: @Model,
success: function(result)
{
alert("The error has been transferred");
//you can also update your divs here with the `result` object, which contains whatever your method returns
}
});
}
</script>
<input type="button" onclick='SendErrors()'/>