我有一个 MVC 控制器,可以在几个不同的地方通过表单提交来调用它。然后控制器呈现一个视图,其主要目的是允许用户发送文档或将其发布到外部站点,以及填写将在通知电子邮件中使用的文本字段。
我正在对这些字段执行验证 - 用户可以输入自定义主题/正文。如果他们不这样做,他们将收到一个弹出警报,并且可以返回到表单或使用占位符值中指示的默认文本提交它。
问题是,当用户第一次到达该页面并单击发送按钮时,文本框中的任何输入实际上都没有注册,并且无论字段中实际有什么,它都会给出空字符串通知;但是,如果我按 F5 并再试一次,则输入完美。
我觉得这与最初通过 POST 操作完成调用此控制器的表单提交有关,而在页面刷新时使用 GET 似乎可以正常工作。我只是不知道如何在通过 POST 调用控制器时让内容正确响应,或者如何在不发布数据的情况下提交表单。
提前感谢您的阅读和任何帮助。
这是调用控制器:
public ActionResult Index(FormCollection collection)
{
//modelbuilding code
return View (Model);
}
调用控制器的代码总是使用这种格式:(在这种情况下,它将从 Recipients/Index 视图中调用。
@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>