【发布时间】:2014-03-27 16:07:42
【问题描述】:
我有一个名为 Groups 的字符串数组,其中包含以下两个字符串
- 阿尔法组
- 集体喝彩
控制器
public ActionResult Task(TaskModel model)
{
return PartialView(model);
}
调用我的任务操作的索引视图
<div id="update">
@using (Ajax.BeginForm("Task", "Home", new AjaxOptions { UpdateTargetId = "update", InsertionMode = InsertionMode.Replace}))
{
<input value="Group Alpha" name="Groups"/>
<input value="Group Bravo" name="Groups"/>
<button type="submit">Submit</button>
}
</div>
我的任务视图
@model MvcApplication4.Models.TaskModel
<div id="container">
@if (Model.Groups != null)
{
foreach (var group in Model.Groups)
{
@Html.TextBox("Groups", group, new { @id = String.Empty })
}
}
</div>
我的任务模型
public class TaskModel : IValidatableObject { public Guid TaskId { get; set; } public String Name { get; set; } public string[] Groups { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { yield break; } }
这仅输出 Group Alpha Group Alpha。哪里出了问题??
抱歉之前没说清楚
复制问题https://www.dropbox.com/s/s2o59cu00am3eov/MvcApplication4.zip的示例项目
【问题讨论】:
-
您认为您是第一个在
foreach循环中使用@Html.TextBox的人吗?这是非常不可能的,因此错误更有可能出现在您的代码中。您确定要调用正确的重载吗?你能展示你如何填写Model.Groups吗?你能打印@Html.Raw(group)吗? -
很可能,无论您使用什么
IEnumerable,它都会在迭代时改变其结果,一个常见的例子是在 C# 5.0 之前关闭循环变量,尽管肯定还有其他制作像这样真正邪恶的迭代器的方法。 -
@JoachimIsaksson 关闭循环变量的问题不会出现在显示的代码中;它将在
Groups的实现中。此处的代码将评估循环体内的任何 lambda。 -
您可以说您看到它有效,但我不相信,因为对我来说它按预期工作。请更新您的问题以显示实际将此模型返回到视图的代码。尝试像我这样的硬编码模型。我们真的无法按原样处理您的问题。
-
@heymega 鉴于问题显然不在于您显示的代码,请向我们展示我们要求查看的代码,而不仅仅是告诉我们认为“这是正确的”。显然不是,或者 something 在其他地方不正确。显示的代码并没有复制您的问题。
标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller