1

コントローラー:

public ActionResult Index()
        {
            return View(db.Profits.ToList());
        }

public ActionResult Create(Profits profits)
{
    {
        var user = db.UserProfiles.FirstOrDefault(x => x.UserId == WebSecurity.CurrentUserId);
        var category = db.Categories.FirstOrDefault(o => o.Id == profits.CategoryID);
        var profit = new Profits
        {
            Value = profits.Value,
            Description = profits.Description,
            DateInput = profits.DateInput,
            CategoryName = category,
            User = user
        };
        db.Profits.Add(profit);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
}

index.cshtml:

model IEnumerable<WebHFM.Models.Profits>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Value)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DateInput)
        </td>

MSSQL Server では、正しい情報が表示されます。名前付きの列を持つテーブルの利益に=CategoryName_idは正しいデータ (1 または 2 またはテーブルの主キーCategories) がありますが、表示する必要があるインデックス ビューName(Categories モデル) では、どこでも Number 0 しか表示されません。

基本的に、モデルViewの列名を含む HTML テーブルを表示したい: , , ,Profits
CategoriesvaluedescriptiondataInput

4

2 に答える 2

1

コントローラーでは、次のものが必要になる場合があります。

public ActionResult Index()
{
    return View(db.Profits.Include("Categories").ToList());
}

あなたの見解では、次のものが必要になります。

model IEnumerable<WebHFM.Models.Profits>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryName.Name)
        </td>
    </tr>

ゼロが表示される理由は、次の行があるためです。

@Html.DisplayFor(modelItem => item.CategoryID)

CategoryID はデータベースのプロパティではなく、モデルのプロパティであるため、データベースから取得しても、このプロパティは値で更新されません。int のデフォルトは 0 であるため、ゼロが得られます。この値を入力したとしても、カテゴリ名ではなく、いたるところに数字が表示されます。これ:

@Html.DisplayFor(modelItem => item.CategoryName.Name)

オブジェクトから実際のカテゴリ名を取得することで問題を解決します。

混乱は、Profits.Category または実際には文字列ではなくオブジェクトであることを示すために、Profits.CategoryName にする必要があるときに、プロパティに Profits.CategoryName という名前を付けたことです。

最後に、Include() が必要な場合と必要でない場合があります。dbcontext がいつ破棄されるかによって異なりますが、おそらく必要になるでしょう。私は現在それを持っていInclude("Categories")ますが、ナビゲーションプロパティの名前が実際に何であるかはわかりません.それは何か違うかもしれません. それが「カテゴリー」ではなく、私が推測しなければならなかった場合、私は推測しますInclude("CategoryName1")

于 2013-03-06T21:53:38.007 に答える
0

ラムダ式が問題です。最初にforeachでいくつかの基本的なHTMLを試してください。

    <td>
        @item.CategoryID
    </td>
于 2013-03-06T21:49:39.440 に答える