C# MVC EditorForDate不';t更新foreach循环中的子属性
我将模型传递给视图,然后我想更改视图中的user.BannEndDate并将其发送回控制器。 无论我将如何处理user.BannEndDate ActionLink,它总是传递由到达模型设置的值。有人能帮我吗 [型号]C# MVC EditorForDate不';t更新foreach循环中的子属性,c#,asp.net-mvc,C#,Asp.net Mvc,我将模型传递给视图,然后我想更改视图中的user.BannEndDate并将其发送回控制器。 无论我将如何处理user.BannEndDate ActionLink,它总是传递由到达模型设置的值。有人能帮我吗 [型号] [DataType(DataType.Date)] public DateTime? BannEndDate { get; set; } [查看] @foreach (var user in Model.Users) { @Html.ActionLink("Bann",
[DataType(DataType.Date)]
public DateTime? BannEndDate { get; set; }
[查看]
@foreach (var user in Model.Users)
{
@Html.ActionLink("Bann", "BannUser", "Account", new { userId = user.Id, bann = true, bannEndDate = user.BannEndDate} , null)
@Html.EditorFor(u => user.BannEndDate)
}
[控制器]
public ActionResult BannUser(string userId, bool bann, DateTime? bannEndDate){}
Mike McCaughan已经说过,
@Html.ActionLink
的值是静态的,因为它们是在调用页面时编写的
你能做的就是给你的ActionLink
和EditorFor
一个特定的ID
@Html.ActionLink("Bann", "BannUser", "Account", new { userId = user.Id, bann = true, bannEndDate = user.EndDate }, new { @id = "TargetLink_" + user.Id })
@Html.EditorFor(m => user.BannEndDate, null, "BannEndDate_" + user.Id)
之后,您可以通过jQuery监听这些控件上的更改,并更改ActionLink(userId=3
将导致BannEndDate\u 3
和TargetLink\u 3
):
这是预期的行为,因为
ActionLink
是在user.BannEndDate
是以前的值时呈现的。这就是像ASP.NET MVC这样的服务器端框架的本质。如果要将其发送回服务器,请将其放入表单中并提交。如果希望在客户端更新ActionLink
,则需要使用客户端代码。换句话说,JavaScript。关于如何在堆栈溢出上实现这一点,有很多问题。好的,我想editorfor也会更新客户端值。谢谢你的回答,而不是使用ActionLink()
只需使用带有FormMethod的表单。Get
将文本框的值发回给你的Get方法(不需要javascript)是的,但是我必须为每个文本框创建一个表单,我想我可以在没有表单的情况下通过Razor传递模型。这也是一个好主意,但我认为javascript更轻?我的目标是点击链接并通过datepicker值更新DB,所以我认为表单是用于收集数据的,而不是用于更新一条记录,也许我错了,请纠正我的错误,让我问你一个好答案,我以为Razor会立即更新所有站点范围内的模型,并且每个方法都会更改引用的对象值,但这是错误的方法。如果您真的想这样做,只需使用POST([HttpPost]
)方法并将模型
传递给控制器。
$('input[id*="BannEndDate_"]').change((e) => {
var userId = e.target.id.substr(e.target.id.indexOf("_") + 1);
var link = $("#TargetLink_" + userId).attr('href');
$("#TargetLink_" + userId).attr('href', link.replace(/(bannEndDate=.*$)/g, 'bannEndDate=' + encodeURIComponent($("#" + e.target.id).val())));
});