我有一个应用程序,可以在tabcontrol中同时打开许多视图。
我在所有观点中都使用了淘汰赛。
我有两个动作如下:
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> </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>
在我看来,我有两个可观察的视图模型,一个用于“添加”模式,另一个用于“编辑”模式。我不能为两种模式使用相同的viewmodel因为当两个操作都打开时,在客户端会有两个具有相同名称的对象.....我这样做错了吗?
我想知道这是否是一种更好的方法来实现这一目标。是否有任何人可以提出另一种更好的方法来做我想做的事情?
TKS。
答案 0 :(得分:0)
我不确定我是否完全理解了这个问题,但是从我收集到的内容来看,同一部分视图可能在选项卡控件中的同一页面上存在两次:一个用于添加,一个用于编辑。但是,您只希望它们能够在添加时输入Codigo值。编辑是否应使用现有的ParametroModel?
首先,我建议您将表单ID设置为唯一(可能只需添加一个随机的后期修复)。这样,当您将绑定应用于表单时,您始终可以确保您正在执行该操作。其次,除了变量名之外,添加和编辑之间的JavaScript看起来没有区别。你也可以把它浓缩成一个。我注意到的最后一件事是你的表单元素上没有knockout数据绑定属性。你有这个工作吗?除此之外,只要在您的视图中没有其他地方执行此脚本后执行封套ko.applyBindings(someViewModel)
,它就可以正常工作。