【问题标题】:how to add an observable property to a knockout.mapping loaded from mvc 4 class如何将可观察属性添加到从 mvc 4 类加载的 knockout.mapping
【发布时间】:2016-07-11 03:59:56
【问题描述】:

我正在使用 mvc4 和 knout,试图了解您可以使用它的所有很酷的东西。

问题是,我有这段代码可以加载信息并将其发送到视图。

public ActionResult AdministraContenidoAlumno()
{
Alumno NuevoAlumno = new Alumno();
            NuevoAlumno.AlumnoId = 1;
            NuevoAlumno.NombreCompleto = "Luis Antonio Vega Herrera";
            NuevoAlumno.PlanEstudioActual = new PlanEstudio
            {
                PlanEstudioId = 1,
                NombrePlan = "Ingenieria en sistemas",
            ListaMateriasPlan = new List<Materias> {
                        new Materias{MateriaId=1,NombreMateria="ingenieria 1"},new Materias{MateriaId=2,NombreMateria="Ingenieria 2"}
                }
        };
        return View(NuevoAlumno);

基本上,创建一个新对象 alumno,其中包含一个 PlanEstudio,其中包含一个 Materias 列表,然后将其发送到视图。

在我看来我有这个。

@model MvcRCPG.Models.Alumno

@{
    ViewBag.Title = "AdministraContenidoAlumno";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<script>
    var data;
    $(function () {
        var jsonModel =             '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model))';
        var mvcModel = ko.mapping.fromJSON(jsonModel);
        data = mvcModel;
        ko.applyBindings(mvcModel);
    });
    function Guardar() {
        $.ajax({
            url: "/DemoKnockuot/GuardarAlumno",
            type: "POST",
            data: JSON.stringify({ 'NuevoAlumno': ko.toJS(data) }),
            dataType: "json",
            traditional: true,
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                if (data == "Success") {
                    alert('entro')
                } else {
                    alert('trono')
                }
            },
            error: function () {
                alert("An error has occured!!!");
            }
        });
    }
</script>

通过上述功能,我可以读取数据并将数据发送到服务器并在控制器上执行操作,但是我需要在视图中添加删除或操作信息。

所以问题是:我如何向“mvcModel”添加一个函数,以便在 ListaMateriasPlan 对象中推送一个新的“材料”?

谢谢,如果您有更多提示以便更好地理解它,我感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc knockout.js knockout-mapping-plugin


    【解决方案1】:

    映射插件创建的mvcModel 将具有可观察的属性。

    例如,要添加新的“材料”,请执行以下操作:

    function Materias() {
      this.MateriaId = ko.observable();
      this.NombreMateria = ko.observable();
    }
    
    var newItem = new Materias();
    newItem.MateriaId(3);
    newItem.NombreMateria("Ingenieria 3");
    
    mvcModel.PlanEstudioActual.ListaMateriasPlan.push(newItem);
    

    通常,您会将“添加”逻辑包装为视图模型中的方法。

    【讨论】:

    • 抱歉直到今天才回答,我们有一些假期,所以如果我添加你刚刚编写的代码,在“main”函数之外,我正在寻找类似的东西learn.knockoutjs.com/#/?tutorial=collections你有没有想法?
    • 是的,就像在教程中一样,您将创建一个父视图模型(例如:AdministrationViewModel),该模型又具有一个可观察的属性(例如:Alumno),您将在其中存储映射的 mvcModel。该父视图模型将包含添加/删除的方法。
    • 谢谢你现在我明白了,我的问题不是淘汰赛是javascript,你有什么好的js教程吗?
    • 我已经在我的 MVC 模型上设置了“addMateria”方法,有例子public class materia() //all the properties then public void InsertarMateria (EntidadMateria Materia){ this.ListaMaterias.add(Materia)}
    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多