如何访问ViewData中项目的值?

时间:2018-10-05 20:35:23

标签: jquery asp.net-mvc razor

@{
    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,并通过比较选择的下拉列表的值与 ViewData [“ branch” ] ,现在是分支列表。

我想在下拉列表中更改选项后,将 shpAddr 文本区域中的值更改为分支机构的地址值。

所有代码都包裹在

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

我收到错误消息,说未定义brhName。

2 个答案:

答案 0 :(得分:0)

您在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.

答案 1 :(得分:0)

正如斯蒂芬·穆克(Stephen Muecke)在评论中提到的那样,我的模型太复杂了,所以我创建了一个小模型,只在其中传递了我需要的部分属性。

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>

这很完美。