gpt4 book ai didi

Jquery 对话框部分 View 服务器端验证“保存”按钮单击

转载 作者:行者123 更新时间:2023-12-01 01:01:47 24 4
gpt4 key购买 nike

我有一个显示数据的表格。表格的每一行都有编辑按钮。单击编辑按钮时,将出现一个 jquery 对话框,其中包含用于编辑用户信息的表单以及保存和取消按钮。表单只不过是部分 View ,按钮是部分 View 的一部分。

<button name="button" class="button" id="editCurrentRow" onclick="EditCurrentRow(@item.ID); return false;">

$("#editResult").dialog({
title: 'Edit Admin',
autoOpen: false,
resizable: false,
height: 500,
width: 600,
show: { effect: 'drop', direction: "up" },
modal: true,
draggable: true,
open: function (event, ui) {
$(this).load('@Url.Action("EditAdmin", "AdminSearchResult")', { id: 1 , isEdit : true }); // pass par from function EditCurrentRow(par) in pacle of 1

},
close: function (event, ui) {
$(this).dialog('close');
}
});

单击编辑按钮后,我会看到包含正确值的对话框。当没有验证错误(服务器端验证)时,保存按钮可以正常工作,但一旦出现验证错误,部分页面将在新页面中打开。取消效果很好。我的部分观点

@using (Ajax.BeginForm("EditAdmin", "AdminSearchResult", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "editPanel" }))
{
<div class="editPanel">

// this is where my html control is
<button name="button" value="save" class="button" id="SubmitButton">Save</button>
&nbsp;
<button name="button" value="cancel" class="button">Cancel</button>

</div>
}

我的 Controller 操作结果是

[HttpPost]
public ActionResult EditAdmin(int id, Administration admin, string button, bool isEdit = false)
{
if (button == "save")
{
var errors = admin.Validate(new ValidationContext(admin, null, null));

if (errors.Count() == 0)
{
return RedirectToAction("AdminSearchResult", "AdminSearchResult");
}
else
{
foreach (var error in errors)
foreach (var memberName in error.MemberNames)
ModelState.AddModelError(memberName, error.ErrorMessage);

return PartialView("EditAdmin", admin);
}
}

if (button == "cancel")
{
return RedirectToAction("AdminSearchResult", "AdminSearchResult");
}

return View();
}

我认为对话框中的任何按钮单击方法都应该是 ajax 化和 json 化的。所以我尝试执行以下操作

<script src="../../Scripts/jquery-1.4.4.js" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {

$("#SubmitButton").click(function () {

var id = $('#txtID').val();
var lName = $('#txtLastName').val();
var mName = $('#txtMiddleName').val();
var fName = $('#txtFirstName').val();
var uName = $('#txtUserName').val();
var email = $('#txtEmail').val();
var uRole = $('#ddlUserRoleName').val();
var active = $('#chkActive').val();

var admin = {
ID: id,
LastName: lName,
MiddleName: mName,
FirstName: fName,
userName: uName,
emailAddress: email,
IsActive: active,
UserRole: uRole
}

$.ajax({
url: '@Url.Action("EditAdmin", "AdminSearchResult")',
type: 'POST',
dataType: 'html',
contentType: "application/json; charset=utf-8",
data: 'JSON.stringify(admin)',
success: function (result) {
alert(result);
if (result.success) {
alert("Success");
} else {
alert("Fail");
$('#editPanel').html(result);
}
}
});
return false;
});
});

</script

问题是在 $("#SubmitButton").click(function () 上添加 $.ajax 调用后,单击按钮时会执行任何操作。我希望它在没有服务器和客户端验证错误时保存发生,如果有错误消息应显示在对话框中。

此外,在我的网络配置中,我有正确的验证设置

<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

谢谢

最佳答案

您应该尝试不显眼的客户端验证示例

JQuery

$('#BTN').click(function () {
var $formContainer = $('#formContainer');
var url = $formContainer.attr('data-url');
$formContainer.load(url, function () {
var $form = $('#myForm');
$.validator.unobtrusive.parse($form);
$form.submit(function () {
var $form = $(this);
if ($form.valid()) {
$.ajax({
url: url,
async: true,
type: 'POST',
data: JSON.stringify("Your Object or parameter"),
beforeSend: function (xhr, opts) {
},
contentType: 'application/json; charset=utf-8',
complete: function () { },
success: function (data) {
$form.html(data);
$form.removeData('validator');
$form.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse($form);
}
});
}
return false;
});
});
return false;
});

查看

<div id="formContainer" data-url="@Url.Action("ActionName", "ControllerName", 
new { area = "Area Name" })"></div>
<input id="BTN" type="button" value="Button" />

型号

public class SampleModule
{
[Required]
public String MyName { get; set; }
}

部分 View

@using (Html.BeginForm("Action Name", "Controller Name", FormMethod.Post, 
new { id = "myForm" }))
{
@Html.LabelFor(i => i.MyName)
@Html.TextBoxFor(i => i.MyName)
@Html.ValidationMessageFor(i => i.MyName)
<p id="getDateTimeString"></p>
<input type="button" value="Button" />
}

引用文献

<script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript">
</script>

关于Jquery 对话框部分 View 服务器端验证“保存”按钮单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com