cuốn sách gpt4 ai đã làm

Xác thực kín đáo các lớp được tạo bởi PostBack

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 12:59:23 30 4
mua khóa gpt4 Nike

Tôi gặp một số khó khăn khi chứng minh biểu mẫu yêu cầu của mình nên nó chỉ gửi thông tin hợp lệ và cho người dùng biết điều gì sai nếu không đúng.

Tôi muốn các thuộc tính mới do Bộ điều khiển tạo (thuộc tính cho liên hệ mới) được xác thực là sai bởi JS không phô trương khi gửi lại biểu mẫu.

quan trọng-Đây là sử dụng Bắt đầuBộ sưu tậpMụcThêm và xóa Liên hệđối tượng từ tài sản cmp.contacts (Danh sách)một cách năng động.

Các thuộc tính này là bắt buộc nhưng có thể bị xóa khỏi biểu mẫu. Sau khi gửi, Bộ điều khiển sẽ kiểm tra chúng và nếu không có, hãy thêm chúng trở lại biểu mẫu.

Chúng không hợp lệ về mặt kỹ thuật do các thuộc tính vừa được thêm vào.

Cập nhật - điều tra thêm

Tuy nhiên, điều này có vẻ kỳ lạ vì tôi có "" làm giá trị chuỗi không hợp lệ vì độ dài ký tự được đặt trong mô hình ít nhất là 3. Vì vậy, trong Bộ điều khiển ở phần đăng lại, tôi kiểm tra xem danh sách có trống không (nếu người dùng đã xóa nó) và tạo một danh sách mới với các liên hệ mới rồi chuyển ModelState.IsValidĐã kiểm tra, nó đã vượt qua. Thuộc tính của liên hệ là các giá trị chuỗi của "", đáng lẽ không hợp lệ, nhưng chúng không được đánh dấu là không hợp lệ cho đến lần đăng lại thứ hai, tại sao vậy?

Câu chuyện ví dụ:

Người dùng xóa danh sách liên hệ khỏi trang (bạn có thể có nhiều hơn 1 liên hệ), gửi biểu mẫu và biểu mẫu không thành công vì nó yêu cầu ít nhất một liên hệ. Bộ điều khiển tạo một liên hệ mới và gửi biểu mẫu trở lại biểu mẫu. Các thuộc tính liên hệ được hiển thị trên trang, nhưng vì chúng mới được tạo nên chúng không hợp lệ.

Nếu người dùng cố gắng gửi lại, chúng sẽ bị đánh dấu là không hợp lệ, nhưng tôi muốn người dùng cần điền những gì thật rõ ràng.

Tôi có thể đặt chúng thành không hợp lệ khi đăng lại không?

Chế độ xem một phần với các trường câu hỏi:

@model Liên hệ

@using (HtmlHelpers.BeginCollectionItem.HtmlPrefixScopeExtensions.BeginCollectionItem(Html, "danh bạ"))
{



@Html.TextBoxFor(m => m.name)




@Html.TextBoxFor(m => m.telphone)




@Html.TextBoxFor(m => m.email)




@Html.DropDownListFor(m => m.type, Danh sách mới
{
new SelectListItem { Text = "Admin", Value = "Admin" },
SelectListItem mới { Text = "Peer", Value = "Peer" },
SelectListItem mới { Text = "Kỹ thuật", Giá trị = "Kỹ thuật" }
})








}

Bộ điều khiển

công khai ActionResult Tạo()
{
var cmp = Công ty mới
{
liên hệ = Danh sách mới
{
Liên hệ mới { email = "", tên = "", điện thoại = "", type = "" }
}
};
trả về Chế độ xem (cmp);
}

[Xác thựcAntiForgeryToken]
Tạo kết quả hành động công khai (Cmp công ty)
{
nếu (ModelState.IsValid)
{
db.companys.Add(cmp);
db.SaveChanges();
EmailSupport.SendEmail(cmp, "Mẫu yêu cầu");
return RedirectToAction("Thankyou", "Home");
}

nếu (cmp.contacts == null)
cmp.contacts = Danh sách mới
{
new Liên hệ { email = "", name = "",phone = "" } // bắt buộc phải hiển thị hàng thuộc tính này
};

trả về Chế độ xem (cmp);
}

người mẫu

[Bảng("Công ty")]
lớp công tyCông ty
{
[Chìa khóa]
public int companyId { được đặt;
[Bắt buộc(ErrorMessage="Yêu cầu tên công ty.")]
tên chuỗi công khai { được đặt;
[Bắt buộc(ErrorMessage = "Yêu cầu điện thoại.")]
đường dây điện thoại công cộng {được đặt;
[Bắt buộc(ErrorMessage="Yêu cầu số đăng ký.")]
chuỗi công khai Số đăng ký { get;
[Đảm bảoOneItem]
Danh sách công khai địa chỉ liên hệ { get;
}
[Bảng("Liên hệ")]
lớp công khai Liên hệ
{
[Chìa khóa]
public int contactId { được đặt;
public int companyId { được đặt;
[ForeignKey("companyId")]
công ty đại chúng {được đặt;
[Bắt buộc(ErrorMessage="Yêu cầu tên liên hệ.")]
tên chuỗi công khai { được đặt;
[Bắt buộc(ErrorMessage="Cần có điện thoại.")]
đường dây điện thoại công cộng {được đặt;
[Required]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
ErrorMessage = "Email không hợp lệ.")]
email chuỗi công khai { được đặt;
[Bắt buộc(ErrorMessage = "Yêu cầu loại liên hệ.")]
loại chuỗi công khai { được đặt;
}

câu trả lời hay nhất

Bạn cần phải tạo của riêng bạn Bối cảnh xác thực để xác minh mới Liên hệ đối tượng và thêm kết quả vào Mô hìnhTrạng thái

if (cmp.contacts == null || !cmp.contacts.Any())
{
var newLink = new Contact(); // không cần đặt giá trị thành chuỗi trống
cmp.contacts = Danh sách mới{ newLiên hệ };

// xác thực
var context = new ValidationContext(newcontact);
var results = Danh sách mới();
Trình xác thực.TryValidateObject(newLiên hệ, ngữ cảnh, kết quả);

// thêm lỗi vào ModelState
foreach(var kết quả trong kết quả)
{
var propertyName = string.Format("contacts[0].{0}", result.MemberNames.First());
ModelState.AddModelError(propertyName, result.ErrorMessage);
}

trả về Chế độ xem (cmp);
}

Về c# - Xác thực kín đáo các lớp do PostBack tạo, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/32824371/

30 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress