已解决:必须从部分删除布局。
我有以下输入:
@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 = "" })
}
答案 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);
希望这会有所帮助