私はMVC 4を初めて使用します。私のプロジェクトと同様に、さまざまな検証エラー番号とそれに対応する検証エラーメッセージを含む特別なファイルを用意する必要があります。次に、これらのエラー番号をモデルで定義し、そのような検証エラーを表示して、そのファイルから対応するエラーメッセージを取得し、検証の概要に表示するようにします。
[Remote]
属性を使用して機能を実現する方法を見つけました。これが私がやった方法です。
モデル CUSTS.cs
namespace MvcTest.Models
{
public partial class CUSTS
{
public Nullable<double> Field1 { get; set; }
[Remote("ValidateAmount", "Validation", AdditionalFields = "Field1, Field2")]
[Display(Name = "BALANCE AMT")]
public Nullable<double> Field2 { get; set; }
}
}
コントローラー ValidationController.cs
namespace MvcTest.Controllers
{
public class ValidationController : Controller
{
Entities1 db = new Entities1();
public static NameValueCollection messagesCol;
public String errorField;
public String errorMessage;
public JsonResult ValidateAmount(CUSTS custs)
{
CUSTS cus = new CUSTS();
if (custs.Field2< custs.Field1)
{
loadMessages();
String[] errMsg = new String[1];
errMsg = messagesCol.GetValues("OES0373");
string st=errMsg[0] + ". \r\n The Balance amount is:" + custs.XWIDV0 + " & the Credit Limit is:" + custs.XWGIVA;
return Json(st,JsonRequestBehavior.AllowGet);
//return new ActionResult(errMsg[0] + ". \r\n The Balance amount is:" + custs.XWIDV0 + " & the Credit Limit is:" + custs.XWGIVA);
}
return Json(true, JsonRequestBehavior.AllowGet);
//return ActionResult.Success;
}
public static void loadMessages()
{
StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("~\\Models\\messages_en.properties"));
String fileContents = sr.ReadToEnd();
String[] sepr = new string[] { "\r\n" };
String[] lines = fileContents.Split(sepr, StringSplitOptions.RemoveEmptyEntries);
messagesCol = new NameValueCollection();
int numMessages = lines.Length;
foreach (string line in lines)
{
int indx = line.IndexOf('=');
if (indx != -1)
{
messagesCol.Add(line.Substring(0, indx), line.Substring(indx + 1));
}
}
sr.Close();
}
}
}
今、私は二つのことを聞きたいです
- 必要な機能を実現するこの方法は正しいですか。他に何ができるでしょうか。
- 私が診断したもう 1 つの問題は、有効かどうかに関係なく、ビュー内のフォームの post メソッドが検証に関係なく実行されていることです。