我有一個ASP.NET MVC 3視圖,基本上有兩種形式,但它們駐留在同一個窗體標記中。 不知道這是否是解決這個問題的正確方法,所以請建議是否有更好的解決方案。根據用戶輸入控制要驗證的字段
用戶在此單頁上有兩個選項。這是關於訂閱新聞通訊的,如果用戶已經有訂閱號碼,則只需要對其中一個「表格」進行驗證。 如果用戶沒有訂閱號碼,則需要驗證其他表單。 我知道,這可以開發更多的用戶友好(和程序員),但這是客戶的要求。
我的問題是,當提交表單時,所有的字段當然是有效的。我需要提供一個檢查來查看用戶是否填寫了SubscriptionNumber字段,然後控制要驗證的「表單」。 你有什麼建議如何做到這一點?我當然希望儘可能簡單。
這是我的看法訂閱:
@model SubscribeNewsletterModel
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.ExistingSubscriber)
@Html.EditorFor(m => m.NewSubscription)
@Html.ValidationSummary()
<input type="submit" />
}
這個觀點我的視圖模型,如下所示:
public class SubscribeNewsletterModel
{
public SubscribeNewsletterModel(SubscriptionModel subscriptionModel,
ExistingSubscriberModel existingSubscriberModel)
{
this.NewSubscription = subscriptionModel;
this.ExistingSubscriber = existingSubscriberModel;
}
// The models contains validation logic (attributes like Required, etc.)
public SubscriptionModel NewSubscription { get; set; }
public ExistingSubscriberModel ExistingSubscriber { get; set; }
}
我的控制器負責處理POST請求。這並不做任何事情 - 只是爲了驗證:
[HttpPost]
public ActionResult Subscribe(
[Bind(Prefix="NewSubscription")] SubscriptionModel newSubscriptionModel,
[Bind(Prefix="ExistingSubscriber")] ExistingSubscriberModel existingSubscriberModel)
{
var vm = new SubscribeNewsletterModel(newSubscriptionModel, existingSubscriberModel);
return View(vm);
}
我希望能有一個更簡單的解決方案,但我最終可能會這樣做。我會將問題留待一兩天。 –