Использование шаблона редактора для редактирования значений в списке Spark View Engine - PullRequest
2 голосов
/ 15 февраля 2012

Я довольно новичок в Spark, и мне трудно найти ресурсы для простых вопросов, в то время как я часто могу найти ответы в Razor. Хотя по большей части между ними есть хороший переход, в настоящее время я не могу понять, что я делаю неправильно с этим переводом Razor-Spark.

Ситуация такова, что у меня есть модель со списком объектов на ней (и некоторыми другими свойствами). Я хочу иметь возможность отображать список в таблице и иметь возможность редактировать несколько свойств модели в списке. Читая вокруг, лучший способ сделать это - создать шаблон редактора, а затем использовать Html.EditorFor со всем списком. Я попробовал это, и когда я отправляю форму обратно в контроллер, я получаю нулевое значение в качестве опубликованного списка, поэтому я сократил его до набора тестового кода, который инкапсулирует то, что я хочу сделать (свойство readonly int, редактируемый флажок) ) и настройте тестовый контроллер / представления для воспроизведения проблемы.

Контроллер:

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

Рабочая бритва:

@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!" />
}

Рабочий шаблон редактора Razor:

@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>

Попытка шаблона Spark Editor:

<viewdata model="TestModel" />

  <td>
    ${Model.Id}
    ${Html.HiddenFor(x => x.Id)}
  </td>
  <td>${Html.CheckBoxFor(x => x.Checked)}</td>

К сожалению, я получаю сообщение об ошибке всякий раз, когда пытаюсь настроить Spark таким же образом, как движок Razor, и просто передаю список редактору одного объекта, говоря, что типы не совпадают, и он ожидает один объект а не список, поэтому мне пришлось перечислить список, прежде чем передавать его в шаблон редактора, который, как мне кажется, вызывает проблему.

Я искал вокруг, но не могу найти решение для этого в настоящее время. Я бы хотел использовать Spark для этого, а не создавать только эти виды в Razor, но я не могу понять, как далеко. Единственная область, о которой я еще не знаю, - это привязки внутри Spark, и могут ли они дать мне то, что мне нужно, но любая помощь будет принята с благодарностью.

Приветствия

1 Ответ

1 голос
/ 15 февраля 2012

Вы написали цикл foreach в своем представлении Spark. Не пишите такие циклы с шаблонами редактора. Вам не нужно их:

<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>
...