私はプロジェクトに 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()'/>