使用ASP.NET MVC和Razor,我试图将ViewBag项从控制器传递给HiddenFor字段(使用Razor).我收到以下消息:扩展方法不能通过动态调度.
@Html.HiddenFor(m=>m.PortfolioId, ViewBag.PortfolioId);
Run Code Online (Sandbox Code Playgroud) 我在ViewModel类中有这个属性:
public bool AreSimilarEntitiesChecked { get; set; }
在我的控制器中,我将其值设置为"true"并返回带有模型的View:
model.AreSimilarEntitiesChecked = true;
return View(model).WithWarning("Check the similar mentors before saving!");
Run Code Online (Sandbox Code Playgroud)
在我的视图中有一个表单,我放置了这个属性的隐藏字段:
@Html.HiddenFor(m => m.AreSimilarEntitiesChecked)
Run Code Online (Sandbox Code Playgroud)
在View返回包含AreSimilarEntitiesChecked的模型后,其值保持为False desipte我在控制器中设置了True值.
我不知道它有什么问题.
生成的HTML:
<input name="AreSimilarEntitiesChecked" id="AreSimilarEntitiesChecked"
type="hidden" value="False" data-val-required="The AreSimilarEntitiesChecked
field is required." data-val="true">
Run Code Online (Sandbox Code Playgroud) 我正在使用HiddenFor与模型绑定,它绑定值.我想将绑定值重置为零.我该怎么做?
我试过这个,但它不起作用......
<% foreach (var item in Model ) { %>
<%: Html.HiddenFor(model => model.ID,new { @value="0"})%>
<% } %>
Run Code Online (Sandbox Code Playgroud) 我有一个简化的测试场景,可用于提出这个问题:一个产品可以有很多组件,一个组件可以属于许多产品.EF生成了类,我将它们修改如下:
public partial class Product
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Component> Components { get; set; }
}
public partial class Component
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
通过以下控制器操作完成组件的创建:
public ActionResult Create(int ProductId)
{
Product p = db.Products.Find(ProductId);
Component c = new Component();
c.Products.Add(p);
return PartialView(c);
}
[HttpPost]
public ActionResult Create(Component …Run Code Online (Sandbox Code Playgroud) 我偶然发现ASP.Net MVC的一个非常奇怪的情况,传递一个"id"作为动作参数和一个"id"隐藏的表单元素.我有一个具有"id"参数的动作.此id值表示项目.我有一个控制器操作,我正在创建一个数据输入表单,用于将员工分配给传入的项目(我创建一个下拉列表,管理员选择要分配给传递项目的员工).通过将员工分配给项目,我创建了一个ProjectEmployee记录(项目ID,员工ID和表示组合的ID,该组合是数据库中的标识列).标识列(名为"id")也是隐藏的表单元素.这是必要的,因为我需要能够在以后编辑项目/员工分配.
无论如何,在为项目创建新的员工分配时,项目ID(传递给操作的"id")将应用于"id"隐藏的表单元素.
我正在通过117行动.117是projectId.它被设置为"id"隐藏字段,该字段应该为0,因为0表示新项目/员工的分配.
查看模型
id - unique id that represents the Project/Employee combination
projectId - the "Id" being passed to action
EmployeeId - what the admin is selecting from drop down
rate
startdate
endDate
...
Run Code Online (Sandbox Code Playgroud)
数据输入表格
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.ProjectId)
...
Id: @Model.Id <br />
ProjectId: @Model.ProjectId<br />
Run Code Online (Sandbox Code Playgroud)
因此,@ Html.HiddenFor(m => m.Id)呈现隐藏的表单元素,其值为117. @ Model.Id将0呈现给UI.单步执行代码我可以在视觉上看到Id属性的值为0.为什么HiddenFor会将它的线交叉并拉出117的值?
这个bug已经进入了生产阶段,所以我手上的数据搞得一团糟,因为我没有在数据库表中创建新记录,而是实际更新了现有记录,因为"Id"属性被错误地设置了从0(表示新记录)到117(这是projectId),因此我正在更新不同的记录.