だから私は、ユーザーが2つのボタンのうちの1つをクリックすると、特定のテキストボックスだけを使用する必要があります。現時点でSafeForLaterのチェックは常に偽であり、この方法では機能しません。ですから、あるボタンがヒットしてデータを私のモデルにバインドしたときに、特定のテキストボックスを使用する方法を知っていれば、感謝しています。見るからビューでは、特定のボタンクリックで特定のテキストボックスとモデルを使用する必要があります。
@model ProblemExample.Models.ViewModelOrder
@{
ViewBag.Title = "Create Order";
}
<h2>CreateOrder</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@if (TempData["CallFrom"] != null && Convert.ToString(TempData["CallFrom"]) == "SenditNow")
{
@Html.TextBoxFor(m => m.viewModelSenditNow.NameOfCustomer)
@Html.TextBoxFor(m => m.viewModelSenditNow.Address)
}
else
{
@Html.TextBoxFor(m => m.viewModelSafeForLater.NameOfCustomer)
@Html.TextBoxFor(m => m.viewModelSafeForLater.Address)
}
<hr />
<button class="formular-button-submit" type="submit" name="SenditNow" value="SenditNow">Send it now!</button>
<button class="formular-button-submit" type="submit" name="submit" id="SafeForLater" value="SafeForLater">Save it for later!</button>
</div>
}
のViewModel:
public class ViewModelOrder
{
public ViewModelSendItNow viewModelSenditNow { get; set; }
public ViewModelSafeForLater viewModelSafeForLater { get; set; }
}
のViewModel SendItnow:
public class ViewModelSendItNow
{
[Required]
public string NameOfCustomer { get; set; }
[Required]
public string Address { get; set; }
}
のViewModel SaveForLater:
public class ViewModelSafeForLater
{
public string NameOfCustomer { get; set; }
public string Address { get; set; }
}
コントローラ:
public ActionResult CreateOrder()
{
ViewModelOrder viewModel = new ViewModelOrder();
return View(viewModel);
}
[HttpPost]
public ActionResult CreateOrder(ViewModelOrder viewModel, string submit)
{
TempData["CallFrom"] = submit;
if(submit == "SendItNow")
{
Order myOrder = new Order()
{
NameOfCustomer = viewModel.viewModelSenditNow.NameOfCustomer,
Address = viewModel.viewModelSenditNow.Address,
State = 1
};
db.Orders.Add(myOrder);
db.SaveChanges();
}
else
{
Order myOrder = new Order()
{
NameOfCustomer = viewModel.viewModelSafeForLater.NameOfCustomer,
Address = viewModel.viewModelSafeForLater.Address,
State = 999
};
db.Orders.Add(myOrder);
db.SaveChanges();
}
return View(viewModel);
}
モデルは別にする必要がありますか?あなたのビューモデルはただ1つの名前と住所を持つことができませんし、コントローラはそれらと何をすべきかを決定しますか?それを行うと、Sandipのように押すことができるボタンを区別するだけで済みます。それ以外の場合は2つのフォームを作成して2つの異なるアクションに直接投稿することができます。 – Lukos
ご意見ありがとうございます。私はあなたになぜ2つのモデルを使っているのか説明しようとします。その理由は、ViewModelの[Requirement] -Attributeを使用してクライアント側の検証を使用するためです。ユーザーが今すぐ注文を送信することを決定した場合、データは完全に検証されます。私は理由が今ではっきりしていることを願っていますが、あなたが新しいアイデアを持っていれば、これはどうすれば解決できるのでしょうか?私はまだASP.NET MVCでたくさんのことを学んでいるので、とても興味があります。 – RawMVC