2

私はEDMを持っています。Currentフィールドのブール値に基づいて表示されるときに、モデルをビューに渡します(現在のレコードは1つだけです)。

public ActionResult Index()
{
    myEDM db = new MyEDM();
    MyEDMModel model = db.MyEDMTable.Where(g => g.Current == 1).First();
    return View(model);
}

テーブルには10列あります

fld1 fld2 fld3 ......

各フィールドは、比較のためにデフォルト値のemptystring''で作成されます(Nullと比較することはできません)。

ビューでは、各フィールドのコンテンツに基づいて背景画像とHTML.Actionlinkを表示します。

@if (Model.fldNo1 == "")
{
    <td class="number">
        @Html.ActionLink("1", "TakeNumber", "Numbers", new { Model, number = 1 })
    </td>
}
else
{
    <td class="numberTaken">
        @Html.ActionLink("1", "NumberTaken", "Home", new { Model, number = 1 })
    </td>
}

各フィールドは、ユーザーが取得および予約できます。フィールドごとに1人のユーザーのみ(明らかに)、フィールド!=''の場合、何もする必要はありません。フィールドは他の誰かによって予約されています。可能な場合、フィールドにはuserIDが入力されます。

ここで私の質問が出てきます。EDMからのページのロードからモデルを渡しました。次に、ユーザーがビューをたとえば5分間閲覧してから、特定の番号を予約することを選択した場合。5分間のブラウジング時間内に別のユーザーがこのフィールドを予約したかどうかを確認するには、EDMからモデルを更新する必要がありますか、それとも渡されたモデルが動的に更新されますか?すなわち

私はこれをしますか:

myEDM db = new MyEDM();
Int32 muser = (Int32)Membership.GetUser().ProviderUserKey;
String user = muser.ToString();

if (number == 1 && model.fldNo1 == "")
{
    model.fldNo1 = user;
    UpdateModel(model);
    db.SaveChanges();
}
elseif ...........

または、最初にモデルをリコールまたは更新して、ユーザーがブラウジングしている間(たとえば、5分)に特定のフィールドのエントリが入力されていないことを確認する必要があります。

myEDM db = new MyEDM();
myEDMModel updateEDMModel = db.MyEDMTable.Where(g => g.id == model.id).First 
Int32 muser = (Int32)Membership.GetUser().ProviderUserKey;
String user = muser.ToString();

if (number == 1 && updateEDMModel.fldNo1 == "")
{
    updateEDMModel.fldNo1 = user;
    UpdateModel(updateEDMModel);
    db.SaveChanges();
}
elseif ...........

残念ながら、私は一人のバンドであり、これをテストするのは非常に困難です。

4

1 に答える 1

2

Entity Framework から設定され、View に渡されたモデルは、アタッチされなくなりました。ビューから EF 呼び出しを行った場合でも (悪い習慣です)、レンダリングされた値は添付されません。

したがって、いいえ、データベースの値が変更されても、表示される値は変更されません

必要な動作を作成するには、Ajax メソッドを使用する必要があります。

私がとても気に入っているのは、@Html.Action()パーシャルを使用することです。次の場合に呼び出します

<script type="text/javascript">
            window.setInterval(
                $.get('@Url.Action("StillOnline", "Account")'), 10000);
</script>
于 2013-01-29T06:06:41.130 に答える