1
このコードでは、Edit
ビューで正しいベンダー名のテキストが表示されますが、テキストボックスを空白にして[保存]を押すと、検証されません。 VendorはOrderモデルのプロパティで、VendorNameはVendorモデルのプロパティです。彼らは参照に関連している。私のフォームはすべて1つのテーブルに入力されるわけではなく、サテライトテーブルにも入力されます。ASP.Net MvCフレームワーク、Html.ValidationMessageタグ
<%= Html.TextBox("Vendor.VendorName")%>
<%= Html.ValidationMessage("Vendor.VendorName")%>
なぜ検証が行われないのですか?
これが動作しているようですが、それは私にはハックのように思える:
using M = HelloUranus.Models
//...
namespace HelloUranus.Controllers
{
public class OrderDetailController : Controller
{
//...
private M.DBProxy db = new M.DBProxy();
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection collection)
{
//...
var orderDetail = db.GetOrderDetail(id);
//...
try
{
if (string.IsNullOrEmpty(Request.Form["Vendor.VendorName"]))
{
throw new Exception();
}
UpdateModel(orderDetail);
db.Save();
return RedirectToAction("Details", new {id = orderDetail.odID });
}
catch
{
ModelState.AddRuleViolations(orderDetail.GetRuleViolations());
return View(orderDetail);
}
//...
}
//...
}
ModelState.AddModelErrorは、自動的にIsValidをfalseに設定します。 –
あなたは正しい、私の間違い。私はあなたが*何かを覚えていなければならないことを知っていましたが、何かが、ModelStateDictionaryをSetModelValueを使って無効なデータでフォームを再作成するように設定しています。 Lemmeはそれを編集する。 – JoshJordan
ワークフローでは、ModelState.AddModelError( "Vendor.VendorName"、 "*")を実行しますか? edit-postアクションメソッドのSave部分のtryセクションで完了した場合、ModelState.IsValidはfalseになるので、例外がスローされます。 – JonathanWolfson