Razor Pages 从 javascript 验证函数调用 asp-page-handler 方法
Razor Pages calling asp-page-handler method from javascript validation function
我有一个带有客户端验证功能的按钮
<button type="submit" title="Submit" class="btn btn-success btn-sm" onclick="return OnSubmitValidate()">
Submit
</button>
我想在这个 javascript 函数中调用 asp-page-handler 方法。目前我正在使用 AJAX 方法,但它没有触发该方法。
function OnSubmitValidate() {
var RequestType = document.getElementById("DrpDwnRequestType");
var RequestTypeValue = RequestType.options[RequestType.selectedIndex].value;
alert(RequestTypeValue);
if ((RequestTypeValue == "") || (RequestTypeValue == null)) {
document.getElementById("ErrRequestType").innerHTML = "Please select Request Type";
return false;
}
$.ajax({
type: 'POST',
url: rootPath + "/RequestForm?handler=Submit",
dataType: "json"
});
}
编辑:提交处理程序
public async Task<IActionResult> OnPostSubmitAsync()
{
BillType = new SelectList(_context.BillType.OrderBy(e => e.ID), "BillTypes", "BillTypes");
var requestexist = await _context.RequestFormMaster.FirstOrDefaultAsync(c => c.RequestID == RequestFormMaster.RequestID);
RequestAlreadyExist = requestexist;
if (RequestAlreadyExist != null)
{
return Page();
}
else
{
RequestFormMaster.RequestID = RequestFormMaster.RequestID.Trim();
RequestFormMaster.LastModifiedBy = HttpContext.Session.GetString("firstname") + " " + HttpContext.Session.GetString("lastname");
RequestFormMaster.LastModifiedTimeStamp = DateTime.Now;
_context.Entry(RequestFormMaster).State = EntityState.Added;
await _context.SaveChangesAsync();
TempData["ReqSubmitted"] = "Submitted";
if (ReqSupportingFiles != null || ReqSupportingFiles.Count > 0)
{
int i = 0;
foreach (IFormFile upload in ReqSupportingFiles)
{
i++;
// Upload file to server folder
string ext = Path.GetExtension(upload.FileName).ToLower();
if ((ext == ".ppt") || (ext == ".pptx") || (ext == ".xls") || (ext == "xlsx"))
{
var filesave = Path.Combine(_env.WebRootPath, "Documents", foldername, i + "_" + upload.FileName);
using (var stream = System.IO.File.Create(filesave))
{
await upload.CopyToAsync(stream);
}
}
}
}
return RedirectToPage("/RequestSummary");
}
//return Page();
}
我想提交整个表单。需要将表单数据插入 table.Anyhelp 将不胜感激
如果你想将整个表单数据传递给处理程序,这里有一个演示:
型号:
public class FormModel
{
public string RequestType { get; set; }
public string Test { get; set; }
}
查看:
<form id="myForm" method="post">
<select id="DrpDwnRequestType" name="RequestType">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input id="Test" name="Test"/>
<input type="button" title="Submit" class="btn btn-success btn-sm" onclick="OnSubmitValidate()" value="Submit"/>
</form>
js:
function OnSubmitValidate() {
var RequestType = document.getElementById("DrpDwnRequestType");
var RequestTypeValue = RequestType.options[RequestType.selectedIndex].value;
alert(RequestTypeValue);
if ((RequestTypeValue == "") || (RequestTypeValue == null)) {
document.getElementById("ErrRequestType").innerHTML = "Please select Request Type";
} else {
$.ajax({
type: 'POST',
url: "?handler=Submit",
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
data: $("#myForm").serialize(),
});
window.location.href = "xxx";
}
}
处理程序:
public async Task<IActionResult> OnPostSubmitAsync(FormModel formModel)
{
...
}
ajax with post request in razor page 需要添加 RequestVerificationToken
到 header,并且 ajax call handler 不会重定向到 RequestSummary
,所以你可以尝试在js中使用window.location.href
重定向。
结果:
我有一个带有客户端验证功能的按钮
<button type="submit" title="Submit" class="btn btn-success btn-sm" onclick="return OnSubmitValidate()">
Submit
</button>
我想在这个 javascript 函数中调用 asp-page-handler 方法。目前我正在使用 AJAX 方法,但它没有触发该方法。
function OnSubmitValidate() {
var RequestType = document.getElementById("DrpDwnRequestType");
var RequestTypeValue = RequestType.options[RequestType.selectedIndex].value;
alert(RequestTypeValue);
if ((RequestTypeValue == "") || (RequestTypeValue == null)) {
document.getElementById("ErrRequestType").innerHTML = "Please select Request Type";
return false;
}
$.ajax({
type: 'POST',
url: rootPath + "/RequestForm?handler=Submit",
dataType: "json"
});
}
编辑:提交处理程序
public async Task<IActionResult> OnPostSubmitAsync()
{
BillType = new SelectList(_context.BillType.OrderBy(e => e.ID), "BillTypes", "BillTypes");
var requestexist = await _context.RequestFormMaster.FirstOrDefaultAsync(c => c.RequestID == RequestFormMaster.RequestID);
RequestAlreadyExist = requestexist;
if (RequestAlreadyExist != null)
{
return Page();
}
else
{
RequestFormMaster.RequestID = RequestFormMaster.RequestID.Trim();
RequestFormMaster.LastModifiedBy = HttpContext.Session.GetString("firstname") + " " + HttpContext.Session.GetString("lastname");
RequestFormMaster.LastModifiedTimeStamp = DateTime.Now;
_context.Entry(RequestFormMaster).State = EntityState.Added;
await _context.SaveChangesAsync();
TempData["ReqSubmitted"] = "Submitted";
if (ReqSupportingFiles != null || ReqSupportingFiles.Count > 0)
{
int i = 0;
foreach (IFormFile upload in ReqSupportingFiles)
{
i++;
// Upload file to server folder
string ext = Path.GetExtension(upload.FileName).ToLower();
if ((ext == ".ppt") || (ext == ".pptx") || (ext == ".xls") || (ext == "xlsx"))
{
var filesave = Path.Combine(_env.WebRootPath, "Documents", foldername, i + "_" + upload.FileName);
using (var stream = System.IO.File.Create(filesave))
{
await upload.CopyToAsync(stream);
}
}
}
}
return RedirectToPage("/RequestSummary");
}
//return Page();
}
我想提交整个表单。需要将表单数据插入 table.Anyhelp 将不胜感激
如果你想将整个表单数据传递给处理程序,这里有一个演示:
型号:
public class FormModel
{
public string RequestType { get; set; }
public string Test { get; set; }
}
查看:
<form id="myForm" method="post">
<select id="DrpDwnRequestType" name="RequestType">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input id="Test" name="Test"/>
<input type="button" title="Submit" class="btn btn-success btn-sm" onclick="OnSubmitValidate()" value="Submit"/>
</form>
js:
function OnSubmitValidate() {
var RequestType = document.getElementById("DrpDwnRequestType");
var RequestTypeValue = RequestType.options[RequestType.selectedIndex].value;
alert(RequestTypeValue);
if ((RequestTypeValue == "") || (RequestTypeValue == null)) {
document.getElementById("ErrRequestType").innerHTML = "Please select Request Type";
} else {
$.ajax({
type: 'POST',
url: "?handler=Submit",
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
data: $("#myForm").serialize(),
});
window.location.href = "xxx";
}
}
处理程序:
public async Task<IActionResult> OnPostSubmitAsync(FormModel formModel)
{
...
}
ajax with post request in razor page 需要添加 RequestVerificationToken
到 header,并且 ajax call handler 不会重定向到 RequestSummary
,所以你可以尝试在js中使用window.location.href
重定向。
结果: