这是具有设置为必需属性的模型类
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Web;
namespace ArcheWeb_nuovo.Models
{
public class Utente : InformazioniGenerali
{
public int ID_utente { get; set; }
[Required]
public string Nome { get; set; }
[Required]
public string Cognome { get; set; }
[Required]
public string Username { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string CID { get; set; }
[Required]
public bool IsLocked { get; set; }
[Required]
public string Password
{
get
{
string caratteri = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int lunghezza = 20;
Random rnd = new Random();
StringBuilder pw = new StringBuilder(lunghezza);
for (int i = 0; i < lunghezza; i++)
{
pw.Append(caratteri[rnd.Next(caratteri.Length)]);
}
string password = pw.ToString();
return password;
}
}
public string Visualizzazione
{
get
{
return Cognome.ToUpper() + " " + Nome;
}
}
}
}
你可以看到我将属性标记为必需但是当我在视图中按下提交按钮时它会引发异常,因为显然数据是空的(数据是空的,因为我正在测试数据验证)。相反,我希望它阻止用户继续。我究竟做错了什么? 这是来自控制器的HttpPost
[HttpPost]
public ActionResult Create(Utente utente)
{
//impostazione parametri della connessione SQL
using (SqlConnection sqlCon = new SqlConnection(ConnessioneDB.STRINGA_CONNESSIONE))
{
try
{
//Aperura connessione
sqlCon.Open();
//assegnazione della query d'inserimento dati in una variabile
string query = "INSERT INTO users(nome, cognome, username, email, CID, azienda, visualizzazione, password) VALUES(@nome, @cognome, @username, @email, @CID, @azienda, @visualizzazione, @password)";
//impostazione del comando sqlCmd
SqlCommand sqlCmd = new SqlCommand(query, sqlCon);
//si utilizza una query parametrizzata per evitare attacchi di SQL Injection
sqlCmd.Parameters.AddWithValue("@nome", utente.Nome);
sqlCmd.Parameters.AddWithValue("@cognome", utente.Cognome);
sqlCmd.Parameters.AddWithValue("@username", utente.Email);
sqlCmd.Parameters.AddWithValue("@email", utente.Email);
sqlCmd.Parameters.AddWithValue("@CID", utente.CID);
sqlCmd.Parameters.AddWithValue("@azienda", utente.Azienda);
sqlCmd.Parameters.AddWithValue("@visualizzazione", utente.Visualizzazione);
sqlCmd.Parameters.AddWithValue("@password", utente.Password);
//si fa partire la query
sqlCmd.ExecuteNonQuery();
}
catch(Exception e)
{
ViewBag.errore = e.Message;
return View("Errore");
}
}
return RedirectToAction("Successo");
}
答案 0 :(得分:1)
在对模型进行任何操作之前,您必须主动检查它是否通过了验证。就像@StephenMuecke和@CalC所说,如果没有,你需要将它返回给客户端。
[HttpPost]
public ActionResult Create(Utente utente)
{
if (!ModelState.IsValid) {
return View(utente);
}
// save your model
}
答案 1 :(得分:0)
异常不是必需属性应该如何工作,因此您很可能在程序中有另一个可能不相关的错误。检查错误消息以查看引发错误的函数。
您可能还希望向Required属性添加特定的错误消息。您可以在this question的答案中详细了解它们。
答案 2 :(得分:0)
password属性具有[required]属性,但没有setter。您应该添加一个setter或删除所需的属性。
[Required()]
public string Password {get; set;}