给定值不在Razor输入字段中呈现

时间:2016-03-15 11:55:15

标签: jquery asp.net asp.net-mvc razor

已解决:必须从部分删除布局。

我有以下输入:

@Html.Hidden("VendorId", (string)ViewBag.VendorId)

它不会从ViewBag渲染值,因此,在尝试了我在这种情况下所知道的一切之后(即使使用html而不是razor,仍然值保持为null),我认为这将是关于是时候尝试用jQuery来解决这个问题了,但是事情变得越来越陌生。以下不起作用:

$("#VendorId").val(id);
$("#VendorId : input").val(id);

但这甚至可以使用jquery至少有一个语法错误:

$("#VendorId : input").val() = id;
$("VendorId : input").val() = id;

所以,我的问题是,这只是我还是这是真的错了?如果它是错的,任何人都可以想到为什么会发生这种情况的原因吗?我猜测razor和jquery的行为是以某种方式连接但无法弄明白所以我需要一些帮助。很确定它是显而易见的。

我正在使用jQuery 1.10.2

这是我设置ViewBag

的值的地方
public async Task<PartialViewResult> SelectvendorList(string VendorId)
{
    ViewBag.VendorName = await _vendorService.GetVendorName(VendorId);
    if (VendorId == null) VendorId = "";
    ViewBag.VendorId = VendorId;

    var lists = await _vendorListService.GetAllForSelectList(User.Identity.GetUserId(), VendorId);

    IEnumerable<SelectListItem> vendorLists = lists.Select(b => new SelectListItem { Value = b.Id, Text = b.Description });
    ViewBag.vendorLists = vendorLists;

    return PartialView();
}

我在我的视图中也有这个段落,它将核心值呈现:

<p id="hiddenVendorId" style="display:none">@vendorId</p>

以下是整个视图:

@{
    ViewBag.Title = "SelectvendorList";
    Layout = "~/Views/Shared/_Purchasing.cshtml";
    var vendorId = ViewBag.VendorId;
}

<p>New Order / Select vendor list</p>

<h4>Vendor : @ViewBag.VendorName</h4>
<p id="hiddenVendorId" style="display:none">@ViewBag.VendorId</p>

@using (Html.BeginForm("AddRemoveItems", "Order", FormMethod.Get))
{
    @Html.Hidden("VendorId", (string)ViewBag.VendorId)
    <div class="form-group flex">
        @Html.Label("VendorListID", "Vendor Lists", htmlAttributes: new { @class = "control-label" })
        <div class="">
            @Html.DropDownList("VendorListID", (IEnumerable<SelectListItem>)ViewBag.vendorLists, "", htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessage("VendorListID", "", new { @class = "text-danger" })
        </div>
    </div>
    <input type="submit" value="Next" />
    <input type="button" id="backButton" onclick="javascript:history.go(-1)" value="Back" />
    @Html.ActionLink("Continue with no Vendor List", "AddRemoveItems", new { VendorId = vendorId, VendorListID = "" })
}

3 个答案:

答案 0 :(得分:0)

鉴于此

<p id="hiddenVendorId" style="display:none">@vendorId</p>

呈现正确的值,您可以考虑在隐藏输入中使用相同的变量,而不是ViewBag

@Html.Hidden("VendorId", vendorId)

答案 1 :(得分:0)

我建议您不要使用ViewBag动态对象将信息传递给您的视图,而是创建一个简单的ViewModel。 E.g。

public class VendorViewModel
{
   public string VendorId {get; set;}
   public string VendorName {get; set;}
   public IEnumerable<SelectListItem> VendorList {get; set;}
}

在您的视图中,顶部定义正在使用的模型

@model VendorViewModel

然后渲染隐藏的输入:

@Html.HiddenFor(v => v.VendorId)

答案 2 :(得分:-1)

要在剃刀中输入alue和id,请执行以下操作

@Html.HiddenFor(m => m.VendorId, new{ @Value = ViewBag.SomeValue}, new {@id ="VendorId"})

考虑ViewBag.SomeValue有价值“供应商”
这将呈现一个html输入标记,如

<input type="text" value="vendor" id="VendorId" name="VendorId">

在javascript中 获取输入值

$("#VendorId").val();

为输入字段指定值

var id = "VendorId";
$("#VendorId").val(id);

希望这会有所帮助