繁体   English   中英

如何在ASP.NET MVC 5中将数据从Knockout.js发布到ViewModel

[英]How to post data from knockout.js to ViewModel in asp.net mvc 5

下面我提到了我的Viewmodel类

public class SignupViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string ShoeSize { get; set; }
    public string DressSize { get; set; } 
}

在我的控制器中

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Index(SignupViewModel model)
    {

        return Json(new {success=true });
    }

在我的基因敲除 self.SignupModel = new signupModel();我想使用self.SignupModel = new signupModel();传递数据self.SignupModel = new signupModel(); 对我的viewmodel。

那可能吗?

请参考此代码。 希望对您有用。

 ajax.post('Account', form).done(function (response) {
            if (response.id != '') {
                window.location = '/account/show?id=' + response.id;
            }
        });  

对于ajax.post()函数,我必须使用ajax.js。

ajax.js

define(function(){

"use strict";

var exports = {},
    performAjaxCall;

$.ajaxSetup({ cache: false });

var $successMessage = $('#SuccessMessage'),
    $failureMessage = $('#FailureMessage'),
    $busyIndicator = $('#BusyIndicator'),
    $ajaxValidationErrors = $('#ajax-validation-errors');

$.subscribe('successMessage', function (message) {
    if (!message)
        message = 'Operation completed successfully.';
    $successMessage.stop(false, true).text(message).show().delay(3000).fadeOut(3000);
});

$.subscribe('failureMessage', function (message) {
    if (!message)
        message = 'Operation failed. Please try again later.';
    $failureMessage.stop(false, true).text(message).show().delay(3000).fadeOut(3000);
});

$.subscribe('showBusyIndicator', function () {
    $busyIndicator.show();
});

$.subscribe('hideBusyIndicator', function () {
    $busyIndicator.hide();
});

$.subscribe('ajaxValidationErrors', function (errors) {
    if (_.isString(errors)) {
        $ajaxValidationErrors.append($('<div>').append(errors));
    } else { // is object
        $.each(errors.validationObjects, function (i, v) {
            var key = v.key;
            var lines = v.lines;
            var keySpan = $('<span>').text(key.charAt(0).toUpperCase() + key.slice(1));
            var valueSpan = $('<span>').text(lines.join(', '));
            var containerDiv = $('<div>').append(keySpan).append('&nbsp;').append(valueSpan);
            $ajaxValidationErrors.append(containerDiv);
        });
    }

    $ajaxValidationErrors.show();
    setInterval(function () {
        $ajaxValidationErrors.hide();
    }, 5000);
});

$.subscribe('clearAjaxValidationErrors', function () {
    $ajaxValidationErrors.empty();
});

performAjaxCall = function (url, type, data, options) {

    var settings, deferred;

    settings = _.defaults(options || {}, {
        async: true,
        dataType: 'json',
        showSuccessMessage: true,
        successMessage: 'Operation completed successfully.',
        showFailureMessage: true,
        failureMessage: 'Operation failed. Please try again later.',
        showBusyIndicator: true
    });

    deferred = $.Deferred();

    $.ajax({
        url: '/api/' + url,
        type: type,
        dataType: settings.dataType,
        contentType: "application/json; charset=utf-8",
        async: settings.async,
        data: data,
        beforeSend: function () {
            $.publish('clearAjaxValidationErrors');
            if (!!settings.showBusyIndicator && !!settings.async) $.publish('showBusyIndicator');
        },
        complete: function () {
            $.publish('hideBusyIndicator');
        },
        success: function (response) {
            deferred.resolve(response);
            if (settings.showSuccessMessage)
                $.publish('successMessage', [settings.successMessage]);
        },
        error: function (xhr, textStatus, error) {
            deferred.reject(xhr, textStatus, error);
            var responseObj = JSON.parse(xhr.responseText);
            switch (xhr.status) {
                case 303:
                    window.location = responseObj.uri;
                    break;
                case 406:
                case 409:
                    $.publish('ajaxValidationErrors', [responseObj]);
                    break;
                case 500:
                    console.log(responseObj);
                    if (settings.showFailureMessage)
                        $.publish('failureMessage', [settings.failureMessage]);
                    break;
                default:
                    if (settings.showFailureMessage)
                        $.publish('failureMessage', [settings.failureMessage]);
                    break;
            }
        }
    });

    return deferred.promise();
};

_.extend(exports, {
    get: function (url, form, options) {
        options = $.extend({ showSuccessMessage: false }, options || {});
        url += '?' + $.param(form);
        return performAjaxCall(url, 'GET', {}, options);
    },
    post: function (url, form, options) {
        return performAjaxCall(url, 'POST', JSON.stringify(form), options);
    },
    put: function (url, form, options) {
        return performAjaxCall(url, 'PUT', JSON.stringify(form), options);
    },
    del: function (url, id, options) {
        return performAjaxCall(url + "?id=" + id, 'DELETE', null, options);
    },
});

return exports;

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM