Viewbag не привязывает значение на пост обратно к контроллеру? - PullRequest
0 голосов
/ 06 апреля 2020

Я использую две viewbags для получения одного и того же списка (List of tags) по запросу get, эти viewbags отображают список как выпадающий список, но когда я отправляю страницу (после запроса), они связывают 0 значений (независимо от того, что я выбрать из выпадающего списка) с объектом в контроллере, но когда я использовал только один выпадающий список, он связывает свое значение с объектом в контроллере?

[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();
}

//Controller
[HttpPost]
public ActionResult CreateNewTotalizerTag(RawTagVM rawTagVM)
{

    return View(rawTagVM);
}





@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" })

                                        </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" })

                                    </div>
                                </div>
                            </div>
                            <div class="form-group">
                                <center><button type="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 при обратной передаче. Свойства представления в виде пакета используются в представлении (cs html) для отображения страницы, получившаяся в результате обработанная страница HTML, отправленная клиенту, не знает их, а также они не отправляются обратно на сервер вместе с данными формы на пост назад.

//Controller
[HttpPost]
public ActionResult CreateNewTotalizerTag(RawTagVM rawTagVM)
{
    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(rawTagVM);
}

Вы можете попытаться назначить выпадающему списку SelectListItem

ViewBag.RawTaglist1 = RawTaglist1.Select(x => new SelectListItem() 
{  
    Value = x.Real_Tag_Id.ToString(), 
    Text = x.R_Tag_Name
}).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...