我对Spark很新,我发现很难找到一般简单问题的资源,但我经常可以在Razor中找到答案。尽管两者之间有很好的交叉,但我目前还无法弄清楚我在Razor-Spark翻译中做了什么错误。使用编辑器模板编辑列表中的值Spark View Engine
情况是,我有一个模型,其上有一些对象(和其他一些属性)。我希望能够在列表中显示列表并能够在列表中编辑模型的几个属性。仔细阅读,最好的方法是设置一个编辑器模板,然后在整个列表中使用Html.EditorFor。我试过这个,当我将表单发回控制器时,我得到一个null作为发布列表,所以我已经将它剥离为一组测试代码,它封装了我想要执行的操作(只读属性和可编辑复选框)并设置一个测试控制器/视图来重现问题。
控制器:
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视图:
@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!" />
}
工作剃刀编辑模板:
@model TestModel
<tr>
<td>
@Html.DisplayFor(x => x.Id)
@Html.HiddenFor(x => x.Id)
</td>
<td>@Html.CheckBoxFor(x => x.Checked)</td>
</tr>
尝试星火观点:
<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>
尝试星火编辑模板:
<viewdata model="TestModel" />
<td>
${Model.Id}
${Html.HiddenFor(x => x.Id)}
</td>
<td>${Html.CheckBoxFor(x => x.Checked)}</td>
不幸的是,我得到一个错误,每当我尝试设置星火起来以同样的方式作为剃刀发动机,只是通过列表中单个对象的编辑,他说,类型不匹配,它期望单个对象而不是列表,所以我必须枚举列表,然后将它传递给编辑器模板,我认为这是导致问题的原因。
我一直在环顾四周,但目前找不到解决方案。我希望使用Spark来完成这个任务,而不是必须在Razor中创建这些视图,但我无法弄清楚到目前为止。我还不清楚的一个领域是Spark内的绑定,以及他们是否会给我我需要的东西,但任何帮助将不胜感激。
干杯
试了一下,并没有工作...又试了一次,我改名以.spark后而不是.cshtml,它的工作!非常感谢,因为这一整个早晨,我的头撞墙。 – 2012-02-15 14:28:34