如何使用 ViewModel

问题描述

假设我有一个 viewmodel,例如一个实体类 Foo 映射的 Fooviewmodel

public class Fooviewmodel 
    {
        public string FooId{ get; set; }

        public string FooDetail { get; set; }

        public DateTime FooStart { get; set; }

        public long FooDuration { get; set; }
    }

要编辑 Foo 对象,我调用相应的编辑视图,并从 Foo 控制器传递 Fooviewmodel。

@model Fooviewmodel 

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
<div class="form-horizontal">
    <h4>Shift</h4>
    <hr />
    @Html.ValidationSummary(true)

    <div class="form-group">
        @Html.LabelFor(model => model.FooId,new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.FooId)
            @Html.ValidationMessageFor(model => model.FooId)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.FooDetail,new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.FooDetail)
            @Html.ValidationMessageFor(model => model.FooDetail)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.FooStart,new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.FooStart)
            @Html.ValidationMessageFor(model => model.FooStart)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.FooDuration,new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.FooDuration)
            @Html.ValidationMessageFor(model => model.FooDuration)
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
</div>
}

<div>
    @Html.ActionLink("Back to List","Index")
</div>

FooDuration 属性很长,因为我需要将持续时间存储为后端 sqlServer DB 中的滴答数作为 BigInt。然后我想使用 FooDuration 并转换为 UI 的时间跨度,以便用户可以以更有用的格式编辑 FooDuration - 假设格式化为 HH:mm。例如,假设我需要让用户能够输入/编辑持续时间为 10:00 是 10 小时的持续时间(然后我需要在数据库中存储 360000000000 个滴答声)。

我的问题是我不知道解决这个问题的最佳方法。如果我在视图模型中创建另一个属性,假设 FooTimeDuration 使用 get 和 set 访问器来更新 FooDuration。这似乎总是在编辑视图 HTTPGET 上获取数据库中存储的内容,这是可以的,但也可以在 HTTPPOST 上获取,因为它会覆盖用户已编辑的内容。我知道我使用了错误方法

我将这个业务逻辑放在 viewmodel 中是否正确,或者我应该将它放在控制器中还是我应该完全做其他事情?

有人可以帮我找到正确的方向吗?我希望我已经解释了我的问题,我知道这可能是基本的东西。如果我没有提供足够的信息,我很乐意编辑问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)