我有一個應用程序,可以在tabcontrol中同時打開許多視圖。使用knockout和ajax應用程序在動作之間共享視圖
我在所有的意見中使用淘汰賽。
我有一個像下面兩個動作:
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>
在我看來,我有兩個觀察到的ViewModels,一個爲'添加'模式和另一個'編輯'模式。我不能對這兩種模式使用相同的視圖模型,因爲當兩個操作都打開時,會在客戶端導致兩個具有相同名稱的對象。我以這種方式做錯了嗎?
我想知道如果這是一個更好的方法來實現。任何機構能否提出另一種更好的方法來做我想做的事?
tks。