0

ModelStateが無効であるため、オブジェクトの作成に失敗します。どんな助けでもありがたいです。簡略化されたモデルは次のようになります。

public partial class Timerecord
{
    public int ID { get; set; }
    public int locationID { get; set; }
    public int teamID { get; set; }
    public int actionID { get; set; }
    public System.DateTime currentTime { get; set; }

    public virtual Location Location { get; set; }
    public virtual Action Action { get; set; }
}

正しく指定されたTimerecordの作成は、次のエラーのために失敗します:「タイプ'System.String'からタイプ'Project.Models.Action'へのパラメーター変換は、タイプコンバーターがこれらのタイプ間で変換できないため失敗しました。」} System.Exception { System.InvalidOperationException}

Timerecordのすべての属性は問題ありませんが、ActionとLocationの両方がNullです(外部キーが正しいため、これは問題ではありません)。自分で外部オブジェクトを設定してからモデルを再評価する必要がありますか、それともコンストラクターAction(string)を指定する必要がありますか?

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Timerecord tm)
    {
        try
        {
            if (ModelState.IsValid)
            {
                db.Timings.Add(tm);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            else
            {
                var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
                ...
            }
            ...

この問題は、コントローラーのCreateメソッド(簡略化)が原因であると思われます。

    public ActionResult Create()
    {
        Timerecord tm = new Timerecord();
        LocationDBContext dbLoc = new LocationDBContext();
        ActionDBContext dbAct = new ActionDBContext();

        tm.currentTime = DateTime.Now;
        tm.locationID = 1;
        tm.actionID = 5;
        tm.Location = dbLoc.Location.Find(tm.locationID);
        /* THE PROBLEM: tm.Action = dbAct.Action.Find(tm.actionID); PROBLEM HERE */

        ViewData.Model = tm;
        return View();
    }

場所は問題ありません、アクションは問題ありません..助けてくれてありがとう!

4

1 に答える 1

0

アクションの名前をアクティビティに変更すると、すべてが正常に機能します。System.Action?!?で混乱したバインディング(...)を推測します。他の説明はありません。おそらく誰かがこの種の問題を確認することができます。

于 2012-11-02T10:07:18.493 に答える