Asp.net mvc 4 淘汰赛未发布到控制器

Asp.net mvc 4 淘汰赛未发布到控制器,asp.net-mvc-4,knockout.js,Asp.net Mvc 4,Knockout.js,我浏览了大量的例子,尝试了许多不同的方法,但我无法使用MVC4将我的淘汰赛发布到我的控制器上。你知道问题是什么吗?我对MVC和淘汰赛还不熟悉,所以解释会很有帮助 **knockout.js** <script src="~/Scripts/jquery-1.8.2.min.js"></script> <script src="~/Scripts/knockout-2.2.0.js"></script> <!-- <script src=

我浏览了大量的例子,尝试了许多不同的方法,但我无法使用MVC4将我的淘汰赛发布到我的控制器上。你知道问题是什么吗?我对MVC和淘汰赛还不熟悉,所以解释会很有帮助

**knockout.js**
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/knockout-2.2.0.js"></script>
<!-- <script src="~/MyJS/AddTeamMember.js"></script> -->
<script src="~/Scripts/knockout.mapping-latest.js"></script>
<script type="text/javascript">

    var initialData = [
    {
        name: "", email: "", phone: "", dept: ""
    }
    ];
    var ContactsModel = function (contacts) {
        var self = this;
        self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
            return { name: contact.name, email: contact.email, phone: contact.phone, dept: contact.dept };
        }));


        self.addContact = function () {
            self.contacts.push({
                name: "",
                email: "",
                phone: "",
                dept: ""
            });
        };

        self.removeContact = function (contact) {
            self.contacts.remove(contact);
        };   

        self.save = function () {
            self.lastSavedJson(JSON.stringify(ko.toJS(self.contacts), null, 2));
            var jsonString = ko.mapping.toJSON(self.contacts);
            $.ajax({
                type: 'POST',
                url: '@Url.Action("Register", "Register")',
                data: jsonString,            
                contentType: 'application/json; charset=utf-8',
                dataType: 'json'   
        });
    };



    self.lastSavedJson = ko.observable("") 
};
</script>

在我看来,您似乎试图在静态JS文件中使用Razor助手(
@Url.Action
),但这行不通。Razor代码仅在Razor视图中工作(
.cshtml

在静态JS文件中,您需要硬编码URL,或者从其他地方获取URL。如果要通过
@Url.Action
使用路由表,一个选项是将其呈现为视图中的数据属性,并从Javascript文件中读取它


首先,将
@Url.Action
部分替换为硬编码路径,如
'/register/register'
,然后从那里开始工作。

我能够找出问题所在,并希望注意到它,以防其他人出错。我有

<body onload="ko.applyBindings(new ContactsModel(initialData));">

然后它将发布到我的控制器。此外,“@Url.Action(“Register”、“Register”)”也起了作用。谢谢大家的帮助

注意-对于本例,我省略了控制器中的处理。我的问题是我根本无法将表单发布到我的控制器。您尝试了什么?单击“保存”按钮时,浏览器控制台中是否有错误?是否调用了
save
函数?是否有AJAX请求发出?发布您的整个应用程序代码,包括Excel操作代码(WTF?),并希望社区能够查明您的问题,这不是一个好主意。将其缩小到一个特定的问题,然后我们就可以提供帮助。是的,正在调用保存的函数。它首先用json字符串填充textarea,这是有效的,但是post没有发生。我尝试过对控制器进行硬编码和使用razor助手(我从一个示例中提取),但从Avish中注意到,助手无法工作,我已将url返回到硬编码状态。我在浏览器中没有收到错误,因为根本没有发生任何事情。我还尝试了一个糟糕的解决方法,在textarea位于标记中时,用json字符串填充textarea。然后,post将发生,但将发送空值,而不是文本区域内的文本。不是我想要的解决方案;我只是随便玩玩。谢谢你的评论。我确实尝试过硬编码的地址,但它没有发布。我理解为什么razor助手不起作用。一旦我能够让帖子起作用,我就能够在js脚本中使用razor助手。仅供参考。
[HttpPost]       
        public ActionResult Register(ContactsModel model)
        {

            ...

            return View();
        }            
<body onload="ko.applyBindings(new ContactsModel(initialData));">
$(document).ready(function()
    {
        ko.applyBindings(new ContactsModel(initialData));
    });