Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MVC中的取消按钮_Javascript_Jquery_Asp.net Mvc - Fatal编程技术网

Javascript MVC中的取消按钮

Javascript MVC中的取消按钮,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我在表单中有一个面板,有3个按钮“保存”、“编辑”和“取消”。 当用户单击edit时,面板内的标签将变为文本框,用户可以在其中编辑内容。此部分已完成。 现在,如果用户已经编辑了内容,但不想保存,则单击“取消”。当他这样做时,编辑的文本将替换为标签的原始内容(数据来自模型)。 我遵循了公认的答案 控制器: [HttpPost] public ActionResult Submit(int id, string actionType) { var model = ne

我在表单中有一个面板,有3个按钮“保存”、“编辑”和“取消”。
当用户单击edit时,面板内的标签将变为文本框,用户可以在其中编辑内容。此部分已完成。
现在,如果用户已经编辑了内容,但不想保存,则单击“取消”。当他这样做时,编辑的文本将替换为标签的原始内容(数据来自模型)。
我遵循了公认的答案

控制器:

[HttpPost]
    public ActionResult Submit(int id, string actionType)
    {
        var model = new CustomerDetailsViewModel();
        var custid = db.Customers.Find(id);
        if(actionType == "Cancel")
        {
            model.Company = custid.Company;
            model.Address = custid.Address;
            model.FullName = custid.FirstName + " " + custid.LastName;
            model.EMail = custid.EMail;
            model.Phone = custid.Phone;
            model.EntryDate = custid.EntryDate;
            model.LastInterestShown = custid.LastInterestShown;
            model.ID = custid.ID;
            model.Status = custid.Status;
        }
        return PartialView(model);
    }
视图:


有人能告诉我哪里出错了吗?

您正在发送一个类型为“GET”的ajax请求,并发送到url:“/Client/Cancel”

如果你没有一个单独的

public ActionResult Cancel() {...}
在控制器中的字段中,此ajax不起作用

你需要做的是

var postdata = { "id": id-here, "actionType": actionType-here  };

$("#btnCancel").click(function(e){
        e.preventDefault();
        $.ajax({
            url: '/Client/Submit',
            type: 'POST',
            data: JSON.stringfy(postdata),
            async: false
    });
});

在ClientController中。

不需要使用AJAX将输入字段重置为原始数据。假设已将模型数据传递给视图,则可以使用隐藏输入存储原始值,然后在用户单击“取消”按钮(只需使用常规按钮)时将其恢复

视图:


JS:


$(“#btnCancel”)。单击(函数(e){
$('公司').val($('临时公司').val());
$('#Address').val($('#tempAddress').val());
$('#FullName').val($('#tempFullName').val());
});    

单击按钮时,为什么要进行ajax调用?如果要在编辑值时重置这些值,则可以使用
window.location.reload()
刷新页面,或使用javascript获取
defaultValue
(第一次呈现页面时的初始值)并重置值,或者只使用
按钮为什么ajax type=GET和controller web操作是HTTP POST?还有,当ajax调用发出时,需要执行哪个控制器?如何转换label->textbox?只需返回另一种方式(很可能隐藏输入并显示原始标签)。@Sharukhkshaji在question@sumedha呃,这个问题是针对纯javascript的。您使用的是MVC,所以只需将LabelFor和EditorFor放在视图中,其中一个隐藏,并在它们之间切换/copy值。不要在表单中添加控件,因为它们没有正确的属性(例如验证)。是的,很抱歉我发布了错误的代码,我编辑了我的问题,并根据您的回答更正了我的代码,但仍然不起作用,因为您没有向控制器发送任何数据。我编辑了我的帖子,你应该如何准备你的数据,并用ajax帖子将其发送给controller。您应该在此处更改id,并在此处更改actionType部分。
public ActionResult Cancel() {...}
var postdata = { "id": id-here, "actionType": actionType-here  };

$("#btnCancel").click(function(e){
        e.preventDefault();
        $.ajax({
            url: '/Client/Submit',
            type: 'POST',
            data: JSON.stringfy(postdata),
            async: false
    });
});
<input type="hidden" name="tempCompany" id="tempCompany" value="@Model.Company"> 
<input type="hidden" name="tempAddress" id="tempAddress" value="@Model.Address"> 
<input type="hidden" name="tempFullName" id="tempFullName" value="@Model.FullName">
<script>
    $("#btnCancel").click(function (e) {
        $('#Company').val($('#tempCompany').val());
        $('#Address').val($('#tempAddress').val());
        $('#FullName').val($('#tempFullName').val());
    });    
</script>