私は、UIにデータ検証を追加するためのベストプラクティスに従っています。 ViewModelにデータ検証を追加し、そのデータが有効な場合は、コントローラにフォームを送信します。ただし、コントローラが受信するデータは常にNULL値です。私が間違っていることは何か考えていますか? MVVC全体のアーキテクチャは私を混乱させています。私はモデルを使用してフォームを送信していましたが、モデルでデータ検証を取得できませんでした。ViewModelデータは、コントローラに渡されるとすべてnullですか?
コントローラー:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> CreateResource(AddResourceViewModel model)
{
if (ModelState.IsValid)
{
await (//does something);
}
return View();
}
のModelView:CSHTMLフォームの
public class AddResourceViewModel
{
public string User { get; set; }
public string ResourceName { get; set; }
public int ResourceId { get; set; }
public string Model { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public decimal Amount { get; set; }
public int UnitId { get; set; }
public int PrimaryEsfId { get; set; }
public IEnumerable<string> Capabilities { get; set; }
public IEnumerable<int> AdditionalEsfs { get; set; }
public Resource Resource { get; set; }
}
ビギニング:
@model erms.ViewModel.AddResourceViewModel
<form asp-controller="AddResource" asp-action="NewResource" method="post" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-body">
<form asp-controller="AddResource" asp-action="CreateResource" method="post" class="form-horizontal">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="ResourceId" class="col-md-2 control-label">Resource ID:</label>
<div class="col-md-10">
<input asp-for="ResourceId" class="form-control" value="@Model.Resource.ResourceId" readonly />
<span asp-validation-for="ResourceId" class="text-danger"></span>
</div>
</div>
'HttpPost'属性でコントローラのアクションを飾っていますか?フォームをサーバーにポストしているのですか、GETリクエストを通じて厳密にこれを実行していますか? –
ええ、申し訳ありませんが、私は例から外しました。私は元の投稿を編集しました。 – vercingortix