Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC EditorForDate不';t更新foreach循环中的子属性_C#_Asp.net Mvc - Fatal编程技术网

C# MVC EditorForDate不';t更新foreach循环中的子属性

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",

我将模型传递给视图,然后我想更改视图中的user.BannEndDate并将其发送回控制器。 无论我将如何处理user.BannEndDate ActionLink,它总是传递由到达模型设置的值。有人能帮我吗

[型号]

[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())));
});