質問

ASP.NET MVC(1.0)、Spark View Engine(1.0)、SubSonic(3.0.0.3)を使用しています。

"編集"の取得に問題があります。正しく動作するように表示します。そのため、コントローラーには、フォームの編集ビューを表示する次のコントローラーアクションがあります。

[AcceptVerbs(HttpVerbs.Get)]
public virtual ActionResult Edit(string name)
{
    var plot = Plot.SingleOrDefault(p => p.UserID == LoggedInUser.ID && p.UrlFriendlyName == name);
    // ViewData["plot"] = plot;
    return View(plot);
}

そのビューのフォームは、次のコントローラーアクションにポストバックします。

[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(Plot plot)
{
    var validator = new PlotValidator();
    try
    {
        var results = validator.Validate(plot);
        if (!results.IsValid)
        {
            ...
        }
    }
}

私が抱えている問題は、最初のコントローラーアクションが、送信されたPlotオブジェクトの値を実際にフォームに入力しないことです。フォームにデータを入力するための唯一の方法は、PlotをViewDataに追加することです:

ViewData["plot"] = plot;

それは編集フォームにデータを入力しますが、値を編集し、上記の2番目のコントローラーアクションに送信すると、基本的には、編集フォームに送信されたプロットではなく、新しい値を含む新しいプロットを送信します更新された値。

おそらく単純なものを見逃しているに違いありませんが、それが何であるかを理解することはできません。フォームのすべてのフィールドには、「plot」という接頭辞が付いたIDがあります。

誰が私が間違っているのか知っていますか?ありがとう。

役に立ちましたか?

解決

Sparkビューエンジンでどのように実行されるかわかりませんが、ASP.NET MVCに付属のすぐに使用できるビューエンジンでは、これは、プレーンバニラViewPageに付属する辞書を使用するのではなく、ページディレクティブを使用するページ。

したがって、ビューの最初のコード行の代わりに、次のようになります。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage" %>

次のようになります。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
     Inherits="System.Web.Mvc.ViewPage<HomePageViewModel>" %>

現在のコントローラーコードは厳密に型指定されたオブジェクトを想定していますが、代わりにViewDataディクショナリを取得しています。したがって、バインディングは発生していません。

次のポッドキャストを確認することを検討してください:

SparkでViewData(強く型付けされたものと弱い型付けされたもの)を使用する方法を調べる http://www.dimecasts.net/Casts/CastDetails/117

他のヒント

Hey Robert-Sparkがデータをどのように処理するかわかりませんが、2番目の部分は修正が非常に簡単です。

まず-MVCがDBに到達しないことを覚えておく必要があります。あなたの場合、レコードを引き出すための基準には2つの基準が関係しているようです。したがって、データが適切に設定されていることを確認したい場合は、もう一度それを引き出す必要があります。したがって、POSTで署名を次のように変更します。

[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(string id, FormCollection form)
{
//assuming you have some kind of PK
var plot = Plot.SingleOrDefault(p => p.ID == id);    
UpdateModel(plot, form.ToValueProvider());
var validator = new PlotValidator();
    try
    {
        var results = validator.Validate(plot);
        if (!results.IsValid)
        {
            ...
        }
    }
}

これはフリーハンドですが、とにかくL2Sでそれを行う方法です...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top