Два Viewbags с одинаковым именем, парами значений в одном View, возвращающие значение 0 в контроллер? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть два вида, которые я связываю с Dropdownlist. Эти два вида имеют одно и то же имя, пару значений, когда я отправляю обратно форму и получаю данные с использованием модели, тогда в модели есть значение 0. У меня есть два div, и я хочу отправить их по одному, потому что я выбираю div с помощью Cloud Totalizer? флажок. В чем проблема?

[HttpGet]
        public ActionResult CreateNewTotalizerTag()
        {
            //This is RawTag List
            var RawTaglist1 = cRTu.RawTagsList();
            ViewBag.RawTaglist1 = new SelectList(RawTaglist1, "Real_Tag_Id", "R_Tag_Name");

            //This is RawTag List
            var RawTaglist2 = cRTu.RawTagsList();
            ViewBag.RawTaglist2 = new SelectList(RawTaglist2, "Real_Tag_Id", "R_Tag_Name");


            return View();
        }
[HttpPost]
public ActionResult CreateNewTotalizerTag(RawTagVM rawTagVM)
        {


            //This is RawTag List
            var RawTaglist1 = cRTu.RawTagsList();
            ViewBag.RawTaglist1 = new SelectList(RawTaglist1, "Real_Tag_Id", "R_Tag_Name");

            //This is RawTag List
            var RawTaglist2 = cRTu.RawTagsList();
            ViewBag.RawTaglist2 = new SelectList(RawTaglist2, "Real_Tag_Id", "R_Tag_Name");

                return RedirectToAction("TotalizerTagsList");
}
//View
@using (Html.BeginForm("CreateNewTotalizerTag", "TotalizerTags", FormMethod.Post))
{
    @Html.HiddenFor(x=>x.Real_Tag_Id)
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3">
            </div>
            <div class="col-md-6">
                <!-- general form elements disabled -->
                <div class="card card-warning">
                    <div class="card-header" style="background-color:#343a40">
                        <h3 class="card-title" style="color:white">Create Totalizer Tag</h3>
                    </div>
                    <!-- This form is to create Raw tag totalizer onPrem or onCloud -->
                    <div class="card-body">
                        <form role="form">
                            <div class="row">
                                <div class="col-sm-6">
                                    <div class="form-group">
                                        <div class="custom-control custom-switch">

                                            @Html.CheckBoxFor(m => m.Is_Cloud_Totalizer, new { @class = "custom-control-input", id = "Is_Cloud_Totalizer" })
                                            <label class="custom-control-label" for="Is_Cloud_Totalizer">Is Cloud Totalizer?</label>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <!-- On Cloud Inputs starts here -->
                            <div  id="oncloud_totalizer" style="display:none">
                                <div class="row">
                                    <div class="col-sm-6">
                                        <div class="form-group">
                                            <label>Enter Tag Name</label>
                                            @Html.EditorFor(m => m.R_Tag_Name, new { htmlAttributes = new { @class = "form-control" } })
                                            @*@Html.ValidationMessageFor(model => model.R_Tag_Name, "", new { @class = "text-danger" })*@
                                        </div>
                                    </div>
                                    <div class="col-sm-6">
                                        <div class="form-group">
                                            <label>Select Raw Tag</label>
                                            @Html.DropDownListFor(m => m.Real_Tag_Id_Cloud, (IEnumerable<SelectListItem>)ViewBag.RawTaglist1, "Select Raw Tag", new { @class = "form-control", id = "Raw_Tag_List1",name="Raw_Tag_List1" })

                                        </div>
                                    </div>
                                </div>
                            </div>

                            <!-- On Prem Inputs starts here -->

                            <div class="row" id="onPrem_totalizer">
                                <div class="col-sm-6">
                                    <div class="form-group">
                                        <label>Select Raw Tag</label>
                                        @Html.DropDownListFor(m => m.Real_Tag_Id, (IEnumerable<SelectListItem>)ViewBag.RawTaglist2, "Select Raw Tag", new { @class = "form-control", id = "Raw_Tag_List2",name="Raw_Tag_List2" })

                                    </div>
                                </div>
                            </div>
                            <div class="form-group">
                                <center><button type="submit" id="submit" class="btn btn-primary">Create Totalizer</button></center>
                            </div>
                        </form>
                    </div>
                    <!-- /.card-body -->
                </div>
                <!-- /.card -->
                <!-- general form elements disabled -->
                <!-- /.card -->
            </div>
        </div>
    </div>
}
<script>
    $(document).ready(function () {

        // Initialize select2
        //$("#Raw_Tag_List1").select2();
        //$("#Raw_Tag_List2").select2();



        //$("#Source_Tag_List").select2();

        $("#Is_Cloud_Totalizer").change(function () {
            if (this.checked) {
                $("#oncloud_totalizer").show();
                $("#onPrem_totalizer").hide();
            }
            else {
                $("#onPrem_totalizer").show();
               $("#oncloud_totalizer").hide();
            }
        });
    });
</script>

1 Ответ

0 голосов
/ 06 апреля 2020

Нет никакого смысла помещать что-либо в ViewBag, если вы затем делаете RedirectToAction (или любой вид перенаправления).

ViewBag существует для контроллера, чтобы передавать данные в его собственный взгляд. Как только ответ отправляется в браузер, ViewBag теряется, и при следующем запросе создается новый.

Перенаправление отправляет ответ в браузер, сообщая ему запросить выбранную конечную точку.

Таким образом, любые данные ViewBag, настроенные до потери return Redirect....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...