Как получить доступ к значениям в элементах ViewData? - PullRequest
0 голосов
/ 05 октября 2018
@{
    ViewBag.Title = "Edit";
    Layout = "~/Views/Shared/_Layout.cshtml";
    List<branchInformation> branches = ViewData["branch"] as          List<branchInformation>;
}
<div class="col" style="width:100%">    
     <div class="form-group">
          Branch:
          @Html.DropDownListFor(model => model.brh_shp_to,
        from i in branches
        select new SelectListItem
        {
            Text = i.brhNm,
            Value = i.brhAddr.ToUpper().Replace(@"\N", "\n")
        }
        ,
         new { @class = "form-control", style = "width:100%", @id = "brh" })

     </div>
</div>
<div class="col">
     <div class="form-group">
          Ship To Address
          <br />
          @Html.TextAreaFor(model => model.brh_shp_to_addr, new { @class = "form-control", @style = "width:100%; max-height:130px; height:130px", @id = "shpAddr" })
          @Html.ValidationMessageFor(model => model.brh_shp_to_addr, "", new { @class = "text-danger" })

     </div>
 </div>
<script type="text/javascript">
    $('#brh').change(function () {
        var brhName = $('#brh option:selected').val();
        $('#shpAddr').val(@branches.Where(i=>i.brhNm == brhName).FirstOrDefault().brhAddr).val());       

    });
</script>

Модель

public class OrderModels
{
    public OrderModels()
    {
       this.Items = new HashSet<Item>();
    }
    public int OrderID { get; set; }
    public string brh_shp_to { get; set; }
    public string brh_shp_addr { get; set; }
}

Сначала в раскрывающемся списке отображается Имя филиала, а его значением является Адрес филиала.Я намерен сохранить текст в раскрывающемся списке как brh_shp_to , и его значение будет сохранено в brh_shp_addr , нопосле того, как я посылаю вызов ajax, модель берет значение и сохраняет его brh_shp_to , а не текст, который я хочу.

Итак, я изменил код, чтобы иметьтекст и значение имеют значение brhNm и имеют другое событие для обнаружения изменения и обновления текстовой области на значение brhAddr, сравнивая выбранное значение раскрывающегося списка с ViewData ["branch"] , которое теперь являетсясписок филиалов.

Я хочу изменить значение в shpAddr textarea на значение адреса ветви при изменении параметра в раскрывающемся списке.

Весь код обернут в

@using (Ajax.BeginForm("AjaxEditOrder", "Orders",
    new AjaxOptions
    {
        OnSuccess = "OnSuccess",
        OnFailure = "OnFailure",
        LoadingElementId = "progress"
    }))
    {
    }

Я получил сообщение о том, что brhName не определено.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Как отметил Стивен Мюке в комментарии, моя модель была слишком сложной, поэтому я создал маленькую модель и перенес туда только ту часть атрибутов, которая мне была нужна.

public class BranchInfo
{
    public string brhNm { get; set; }
    public string brhAddr { get; set; }
}

<script type="text/javascript">

    $('#brh').change(function () {
        var brhName = $('#brh option:selected').val();
        var data = JSON.parse('@Html.Raw(Json.Encode(branches))');


    for (var i = 0; i < data.length; i++) {
        if (data[i].brhNm == brhName)
        {
                $('#shpAddr').val(data[i].brhAddr);
        }
     }
</script>

Это прекрасно работает.

0 голосов
/ 05 октября 2018

Вам не хватает кавычек в вашем javascript?

изменить:

$('#shpAddr').val(@branches.Where(i=>i.brhNm == brhName).FirstOrDefault().brhAddr).val()); 

На

$('#shpAddr').val('@branches.Where(i=>i.brhNm == brhName).FirstOrDefault().brhAddr').val());  //not sure what brhAddr holds. you might also have th remove the last .val() on this line.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...