0

我有一个应用程序,可以在选项卡控件中同时打开许多视图。

我在所有观点中都使用淘汰赛。

我有两个动作,如下所示:

    public ActionResult Edit()
    {
        ViewData["Mode"] = "Edit";
        return PartialView("AddOrEdit", new ParametroModel() { Codigo = "banco", Descricao = "String de conexao do banco de dados" });
    }

    public ActionResult Add()
    {
        ViewData["Mode"] = "Add";
        return PartialView("AddOrEdit", new ParametroModel() { Codigo = "banco", Descricao = "String de conexao do banco de dados" });
    }

两者都共享相同的局部视图“AddOrEdit”,请按照我的观点:

@model CCL.Apoio.Web.Models.ParametroModel
@{
    var isEdit = ViewData["Mode"] == "Edit";
    var isAdd = ViewData["Mode"] == "Add";
}

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "formParametro" }))
{
    @Html.Partial("_FormValidation")
    <fieldset>
        <legend>Dados do parâmetro</legend>
        <dl>
            <dt>
                <label>Código</label></dt>
            @if (isAdd)
            {
                <dd>@Html.TextBoxFor(m => m.Codigo)</dd>
            }
            else
            {
                <dd>@Html.DisplayFor(m => m.Codigo)</dd>
            }
        </dl>
        <dl>
            <dt>
                <label>Descrição</label></dt>
            <dd>
                @Html.TextAreaFor(m => m.Descricao)</dd>
        </dl>
        <dl>
            <dt>
                <label>Valor</label></dt>
            <dd>
                @Html.TextAreaFor(m => m.Valor)
            </dd>
        </dl>

        <dl>
            <dt>&nbsp;</dt>
            <dd>
                <input type="submit" value="Cadastrar" onclick="" /></dd>
        </dl>
    </fieldset>
}

<script type="text/javascript">
    @if (isEdit)
    {
        <text>
        var parametroEditModel = ko.mapping.fromJSON('@Html.Raw(Json.Encode(Model))');
        parametroEditModel.Save = function () {
            ModuloHelper.ajaxPut('/Api/Parametros', parametroEditModel); //Post data
        };
        ko.applyBindings(parametroEditModel, document.getElementById("formParametro"));
        </text>
    }
    else if (isAdd)
    {
        <text>
        var parametroAddModel = ko.mapping.fromJSON('@Html.Raw(Json.Encode(Model))');
        parametroAddModel.Save = function () {
            ModuloHelper.ajaxPost('/Api/Parametros', parametroAddModel);
        };
        ko.applyBindings(parametroAddModel, document.getElementById("formParametro"));
        </text>

    }
</script>

在我看来,我有两个可观察的视图模型,一个用于“添加”模式,另一个用于“编辑”模式。我不能对两种模式使用相同的视图模型,因为打开两个操作时,客户端会有两个同名的对象。我这样做错了吗?

我想知道这是否是实现这一目标的更好方法。有没有人可以提出另一种更好的方法来做我想做的事?

tks。

4

1 回答 1

0

我不确定我是否完全理解这个问题,但从我收集的信息来看,相同的局部视图可能在选项卡控件的同一页面上存在两次:一个用于添加,一个用于编辑。但是,您只希望他们能够在添加时输入 Codigo 值。编辑是否应该使用现有的 ParametroModel?

首先,我建议您使您的表单 ID 独一无二(也许只需附加一个随机的后缀)。这样,当您将绑定应用到表单时,您始终可以确保您正在对正确的表单执行此操作。其次,看起来除了变量名称之外,添加和编辑之间的 JavaScript 没有区别。你不妨把它浓缩成一个。我注意到的最后一件事是表单元素上没有淘汰数据绑定属性。你得到这个工作了吗?除此之外,只要在您的视图中没有其他地方您ko.applyBindings(someViewModel)在此脚本执行后做一个毯子,它就应该可以正常工作。

于 2012-12-19T20:06:04.033 回答