我是 Spark 的新手,我发现很难找到一般简单问题的资源,而我通常可以在 Razor 中找到答案。虽然两者之间大部分有很好的交叉,但我目前无法弄清楚我在这个 Razor-Spark 翻译中做错了什么。
情况是我有一个模型,上面有一个对象列表(以及一些其他属性)。我希望能够在表格中显示列表并能够在列表中编辑模型的几个属性。仔细阅读,最好的方法是设置一个编辑器模板,然后对整个列表使用 Html.EditorFor。我试过这个,当我将表单发回 Controller 时,我得到一个 null 作为发布列表,所以我将它剥离成一组测试代码,封装了我想做的事情(一个只读的 int 属性,一个可编辑的复选框) 并设置测试 Controller / View 以重现问题。
Controller :
public class TestController : Controller
{
public ActionResult ListTest()
{
var model = new List<TestModel>
{
new TestModel {Id = 1, Checked = true},
new TestModel {Id = 2, Checked = true},
new TestModel {Id = 3, Checked = false}
};
return View(model);
}
[HttpPost]
public ActionResult ListTest(List<TestModel> model)
{
return View(model);
}
}
工作 Razor View :
@model IList<TestModel>
@using (Html.BeginForm("ListTest", "Test", FormMethod.Post))
{
<table style="border: 1px solid">
@Html.EditorFor(x => x)
</table>
<input type="submit" value="Clicky!" />
}
Working Razor 编辑器模板:
@model TestModel
<tr>
<td>
@Html.DisplayFor(x => x.Id)
@Html.HiddenFor(x => x.Id)
</td>
<td>@Html.CheckBoxFor(x => x.Checked)</td>
</tr>
尝试的 Spark View :
<viewdata model="IList<TestModel>" />
<content name="main">
<div id="main">
<form action='' id='testform' method='post'>
<table>
<tr each="var item in Model">
${Html.EditorFor(x => item, "TestModel")}
</tr>
</table>
<input type="submit" value="Clicky!" />
</form>
</div>
</content>
尝试的 Spark 编辑器模板:
<viewdata model="TestModel" />
<td>
${Model.Id}
${Html.HiddenFor(x => x.Id)}
</td>
<td>${Html.CheckBoxFor(x => x.Checked)}</td>
不幸的是,每当我尝试以与 Razor 引擎相同的方式设置 Spark 并将列表传递给单个对象编辑器时,我都会收到错误消息,提示类型不匹配并且需要单个对象而不是列表,所以我不得不在将列表传递给编辑器模板之前枚举列表,我认为这是导致问题的原因。
我一直在四处寻找,但目前找不到解决方案。我想为此使用 Spark,而不是必须在 Razor 中制作这些 View ,但我无法弄清楚到目前为止。我还不清楚的一个领域是 Spark 中的绑定(bind)以及它们是否可以提供我需要的东西,但我们将不胜感激任何帮助。
干杯
最佳答案
您在 Spark View 中编写了一个 foreach
循环。不要用编辑器模板编写这样的循环。你不需要他们:
<viewdata model="IList<TestModel>" />
<content name="main">
<div id="main">
<form action='' id='testform' method='post'>
<table>
${Html.EditorForModel()}
</table>
<input type="submit" value="Clicky!" />
</form>
</div>
</content>
在你的模板中:
<viewdata model="TestModel" />
<tr>
<td>
${Model.Id}
${Html.HiddenFor(x => x.Id)}
</td>
<td>${Html.CheckBoxFor(x => x.Checked)}</td>
</tr>
关于c# - 使用编辑器模板编辑列表中的值 Spark View Engine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9294295/