2

DempData["sth"] を整数自体ではなくオブジェクトとして認識するため、TempData から整数をプローブする際にこの問題が発生します。これが私のCreateメソッドで、整数をTempDataに送信しています。

public ActionResult Create(int CustomerId, int qSetId, int Count)
{
    qSet qset = db.qSets.Find(qSetId);
    TempData["qSetId"] = qset.Id;
    Customer customer = db.Customers.Find(CustomerId);
    TempData["CustomerId"] = customer.Id;
    List<Relation> relations = db.Relations.Where(r => r.qSetId.Equals(qSetId)).ToList<Relation>();
    Question question = new Question();
    List<Question> questions = new List<Question>();
    foreach (Relation relation in relations)
    {
        question = db.Questions.Find(relation.QuestionId);
        if (questions.Contains<Question>(question).Equals(false))
            questions.Add(question);
    }
    if (questions.Count<Question>().Equals(Count).Equals(false))
    {
        TempData["QuestionId"] = questions[Count].Id;
        TempData["QuestionType"] = questions[Count].Type;
        ViewBag["QuestionContent"] = questions[Count].Content;
        TempData["Count"] = Count + 1;
        return View();
    }
    else
    {
        return RedirectToAction("ThankYou");
    }
}

そして、このデータをプローブするもう 1 つの方法を次に示します。

[HttpPost]
public ActionResult Create(Answer answer)
{                               
    answer.QuestionId = TempData["QuestionId"];
    answer.CustomerId = TempData["CustomerId"];

    if (ModelState.IsValid)
    {
        db.Answers.Add(answer);
        db.SaveChanges();
        return RedirectToAction("Create", new { CustomerId = TempData["CustomerId"], qSetId = TempData["qSetId"], Count = TempData["Count"] });
    }

    ViewBag.CustomerId = new SelectList(db.Customers, "Id", "eAdress", answer.CustomerId);
    ViewBag.QuestionId = new SelectList(db.Questions, "Id", "Name", answer.QuestionId);
    return View(answer);
}

エラーは次の場所にあります。

answer.QuestionId = TempData["QuestionId"];
answer.CustomerId = TempData["CustomerId"];

そして、このように行きます:

タイプ 'object' を 'int' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)

何か助けはありますか?

4

3 に答える 3

9

これに対する解決策は、「ボックス化解除」と呼ばれます。objectからintへのストレート キャストです。

answer.QuestionId = (int)TempData["QuestionId"];
于 2012-05-07T08:38:30.900 に答える
1

コードで同じ問題が発生しました。

これらのソリューションは両方とも機能しました。

    answer.QuestionId = Convert.ToInt32(TempData["QuestionId"];

    answer.QuestionId = (int)TempData["QuestionId"];

ただし、すべてのオブジェクトを暗黙的に int にキャストできるわけではないため、(int) キャストはすべてのインスタンスで機能するとは限りません。このため、Convert.ToInt32() を使用する方が安全です。

于 2016-02-16T22:15:51.887 に答える