c# - 使用编辑器模板编辑列表中的值 Spark View Engine

标签 c# asp.net-mvc-3 spark-view-engine

我是 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/

相关文章:

asp.net-mvc - asp.net mvc 2 预览版 2 和 Spark

c# - 将 SQL 地理转换为 C#

c# - ASP.NET Web API 默认不允许 HTTP PUT 和 DELETE

c# - 使用 HttpPost 将 IEnumerable 或列表模型传递给 Controller

c# - 是否可以将 DataAnnotations 与接口(interface)继承一起使用?

c# - ASP.NET MVC 电子邮件

c# - 如果落后则跳过帧渲染

c# - 为什么我不能在 Nancy 中注册自定义 JSON.Net 实现?

apache - 如何在运行 Apache2 的单个虚拟主机上托管多个 MVC3 站点?

asp.net-mvc - ASP.NET MVC Spark View 引擎