更新前MVC4 .net4模型刷新?

时间:2013-01-29 05:58:56

标签: c# sql-server asp.net-mvc entity-framework-4 asp.net-mvc-4

我有EDM。我根据当前字段的布尔值显示一个模型到一个视图(只有一个记录是当前的):

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>
}

用户可以获取并保留每个字段。每个字段只有一个用户(显然),如果字段!=''那么我必须什么都不做。该字段由其他人保留。如果可用,则使用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 ...........

不幸的是,我是一个单人乐队,我在测试时很难。

1 个答案:

答案 0 :(得分:2)

不再附加从Entity Framework填充并传递到View的模型。即使您从View中进行了EF调用(不好的做法,也不要),渲染的值也不会附加。

所以, 否,您的显示值不会随着数据库值的变化而改变

为了创建所需的行为,您需要使用Ajax方法。

我非常喜欢使用@Html.Action()部分。如果在

中呼叫
<script type="text/javascript">
            window.setInterval(
                $.get('@Url.Action("StillOnline", "Account")'), 10000);
</script>