いくつかの異なる場所でフォーム送信を介して呼び出すことができる MVC コントローラーがあります。次にコントローラーは、ユーザーがドキュメントを送信したり外部サイトに投稿したり、通知メールで使用されるテキスト フィールドに入力できるようにすることを主な目的とするビューをレンダリングします。
これらのフィールドで検証を実行しています - ユーザーはカスタムの件名/本文テキストを入力できます。そうでない場合は、ポップアップ アラートが表示され、フォームに戻るか、プレースホルダー値に示されているデフォルトのテキストを使用してフォームを送信できます。
問題は、ユーザーが最初にこのページにアクセスして送信ボタンをクリックしたときに、テキスト ボックスへの入力が実際には登録されておらず、実際のフィールドの内容に関係なく、空の文字列の通知が表示されることです。ただし、F5 を押して再試行すると、入力は完全に機能します。
これは、最初にこのコントローラーを呼び出すフォーム送信が POST アクションを介して行われることに関係しているように感じますが、ページの更新時に GET を使用すると問題なく動作するようです。コントローラーが POST 経由で呼び出されたときにコンテンツを適切に応答させる方法、またはデータを投稿せずにフォームを送信する方法がわかりません。
読んで助けてくれてありがとう。
呼び出し元のコントローラーは次のとおりです。
public ActionResult Index(FormCollection collection)
{
//modelbuilding code
return View (Model);
}
コントローラーを呼び出すコードは、常に次の形式を使用します: (この場合、受信者/インデックス ビューから呼び出されます。
@using(Html.BeginForm("Index", "Distribution", FormMethod.Post )) {
//form values
<input type="submit" data-role="button" value="Done"/>
}
ビューと JS 検証関数の関連部分は次のとおりです。
<div id="SubjectTemplate">
<p>Subject: <input id="emailSubjectTextBox" name="EmailSubject" placeholder="@EmailSubject" /></p>
</div>
<a href="javascript:validateInput();">Send Notification</a>
<script>
function validateInput() {
var possibleErrors = [];
if (!(document.getElementById('emailSubjectTextBox').value)) {
possibleErrors.push('@incompleteEmailSubject' + '\n');
}
//more validation that works the same way and has the same problem
if (possibleErrors.length > 0) {
if (confirm(possibleErrors))
{
window.location.href = '@Url.Action("Send")'
}
}
else {
window.location.href = '@Url.Action("Send")'
}
}
</script>