View должен использовать определенные текстовые поля и модели при определенных нажатиях кнопок, как это сделать?

Так что я хочу, если пользователь нажимает одну из двух кнопок, должны использоваться только определенные текстовые поля. На данный момент проверка, которую я делаю для 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 от View:

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 ответ

Вы можете установить значение в Tempdata по нажатию кнопки из контроллера и проверить это значение Tempdata вместо значения Request.Form.

контроллер:

public ActionResult Save(string submit)
{
     TempData["CallFrom"] = submit;
     return RedirectToAction("Index");
}

Посмотреть:

@using (Html.BeginForm("Save","Home"))
{   
    <div class="form-horizontal">

        @if (TempData["CallFrom"] != null && Convert.ToString(TempData["CallFrom"]) == "SenditNow")
        {
            <h1>SenditNow</h1>
            <input type="text" value="NameOfCustomer" />
            <input type="text" value="Address" />
        }

        else
        {
            <h1>SafeForLater</h1>
            <input type="text" value="NameOfCustomer" />
            <input type="text" value="Address" />
        }
        <hr />
        <button class="formular-button-submit" type="submit" name="submit" id="SenditNow" value="SenditNow">Send it now!</button>
        <button class="formular-button-submit" type="submit" name="submit" id="SafeForLater" value="SafeForLater">Safe it for later!</button>
    </div>
}

Примечание: в вашем контроллере получите значение submit. Только нажатие кнопки передаст ее значение

Другие вопросы по тегам