2012-02-15 13 views
2

私はSparkが新しく、一般的に単純な質問のためのリソースを見つけるのが難しいと思っていますが、私はRazor 。ほとんどの場合、2つの間に良好なクロスオーバーがありますが、私は現在、このRazor-Sparkの翻訳で間違っていることを解決できません。エディタテンプレートを使用してリスト内の値を編集するSpark View Engine

状況は、モデルのオブジェクトのリスト(およびその他のプロパティ)があります。私はテーブルにリストを表示し、リスト内のモデルのいくつかのプロパティを編集できるようにしたい。これを行う最善の方法は、エディタテンプレートを設定してから、リスト全体でHtml.EditorForを使用することです。私はこれを試して、コントローラにフォームをポストすると、私はポストされたリストとしてnullを取得するので、私は何をしたいのかをカプセル化するテストコードのセットを削除しました(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!" /> 
} 

ワーキングカミソリエディタテンプレート:

@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でこれらのビューを作成する必要はありませんが、これまでのところどのように考えているのか分かりません。私がまだ明確ではない1つの領域は、スパーク内の拘束力と、必要なものを私に与えるかもしれないかどうかです。しかし、どんな助けも大いに評価されるでしょう。

乾杯

答えて

1

あなたはスパークビューでforeachループを書きました。このようなループをエディタテンプレートで書き込まないでください。あなたは、EMを必要としません:

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

とテンプレートで:私は.sparkするビューと改名した後、

<viewdata model="TestModel" /> 
<tr> 
    <td> 
    ${Model.Id} 
    ${Html.HiddenFor(x => x.Id)} 
    </td> 
    <td>${Html.CheckBoxFor(x => x.Checked)}</td> 
</tr> 
+0

はそれを試してみましたが、それはうまくいきませんでした...再びそれを試してみました.cshtmlの代わりにそれは働いた!おかげさまで、この午前中は壁のために頭を叩いていました。 –

関連する問題