Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MVC Core 3.1和Vue/Axios发布的空值

MVC Core 3.1和Vue/Axios发布的空值
EN

Stack Overflow用户
提问于 2020-02-26 05:54:34
回答 1查看 2.3K关注 0票数 1

我在使用ASP.Net MVC Core3.1将数据发布到Create控制器方法时遇到了问题。谁能告诉我我错过了什么吗?我的代码到达了Create控制器方法中的断点,但参数始终为null。

理想情况下,我希望以JSON的形式发送表单数据,并让JSON.Net将其转换为对象。我目前正在处理的消息来源是:https://github.com/encouragingapps/DebtRefresh

这是我的控制器代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DebtRefresh.WebUI.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace DebtRefresh.WebUI.Controllers
{
    public class CreditCardController : Controller 
    {
        // GET: CreditCard
        public ActionResult Index()
        {
            return View();
        }

        // GET: CreditCard/Details/5
        //public ActionResult Details(int id)
        //{
        //    return View();
        //}

        // GET: CreditCard/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: CreditCard/Create
        [HttpPost]        
        public ActionResult Create([FromBody]String CardVendor)
        {
            try
            {

                String card;
                card = CardVendor;


                // THIS CODE ALWAYS RETURNS NULL DATA No matter what I try


                return RedirectToAction(nameof(Index));
            }
            catch
            {
                return View();
            }
        }

        // GET: CreditCard/Edit/5
        //public ActionResult Edit(int id)
        //{
        //    return View();
        //}

        // POST: CreditCard/Edit/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(int id, IFormCollection collection)
        {
            try
            {
                // TODO: Add update logic here

                return RedirectToAction(nameof(Index));
            }
            catch
            {
                return View();
            }
        }

        // GET: CreditCard/Delete/5
        //public ActionResult Delete(int id)
        //{
        //    return View();
        //}

        // POST: CreditCard/Delete/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Delete(int id, IFormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here

                return RedirectToAction(nameof(Index));
            }
            catch
            {
                return View();
            }
        }
    }
}

以下是vue代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var app = new Vue({
    el: '#app',
    data: {
        CardVendor: '',
        CardNickname: '',
        CreditCardType: '',
        CardLimit: '',
        CardBalance: '',
        InterestRates: [
            {
                interestRate: '0.30',
                startDate: '1/1/2020',
                endDate: '6/30/2020'
            },
            {
                interestRate: '0.60',
                startDate: '7/1/2020',
                endDate: '12/31/2020'
            }
        ]
    },
    methods: {
        addInterestRate: function (event) {                   
            this.interestRates.push({});
        },
        removeInterestRate: function (event) {            
            this.interestRates.pop({});
        },    
        addCard: function (event) {
            //alert(JSON.parse(JSON.stringify(app.$data)));
      
            axios
                .post('/CreditCard/Create', {
                    data: this.CardVendor                    
                }).then(function (response) {
                    console.log(response);
                })
                .catch(function (error) {
                    console.log(error);
                });
        }    

    }
})

以下是视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@{
    ViewData["Title"] = "Add Credit Card";
}
<h1>
    Add Credit Card
</h1>
<div id="app">
    <!--Vue App Start-->
    <label>Credit Card Vendor Name:</label>
    <br />
    <input v-model="CardVendor" placeholder="[Enter Credit Card Vendor Name]" size="50">
    <br /><br />

    <label>Credit Card Nick Name:</label>
    <br />
    <input v-model="CardNickname" placeholder="[Enter Credit Card Nickname]" size="50">
    <br /><br />

    <label>Credit Card Type:</label>
    <br />
    <select v-model="CreditCardType">
        <option value="1">Visa</option>
        <option value="2">Mastercard</option>
        <option value="3">Discover</option>
        <option value="4">American Express</option>
        <option value="5">Other</option>
    </select>

    <br /><br />

    <label>Credit Card Credit Limit:</label>
    <br />
    <input v-model="CardLimit" placeholder="[Enter Credit Card Limit]" size="50">
    <br /><br />

    <label>Credit Card Credit Balance:</label>
    <br />
    <input v-model="CardBalance" placeholder="[Enter Credit Card Balance]" size="50">
    <br /><br />

    <label>Add Interest Rate(s):</label>
    <table border="1">
        <thead>
            <tr>
                <th>Interest Rate %</th>
                <th>Start Date</th>
                <th>End Date</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
            <tr v-for="(item,index) in InterestRates">
                <td><input type="text" v-model="item.interestRate"></td>
                <td><input type="text" v-model="item.startDate"></td>
                <td><input type="text" v-model="item.endDate"></td>
                <td><button type="button" v-on:click="removeInterestRate(item)">Remove</button>
            </tr>
        </tbody>
    </table>

    <button v-on:click="addInterestRate">Add Interest</button>

    <br />
    <br />

    <button v-on:click="addCard">Add Card</button>

    <br />
    <br />
    <font color="gray">CardVendor-debug: {{ CardVendor }}</font><br />
    <font color="gray">CardNickname-debug: {{ CardNickname }}</font><br />
    <font color="gray">Creditcardtype-debug: {{ CreditCardType }}</font><br />
    <font color="gray">CardLimit-debug: {{ CardLimit }}</font><br />
    <font color="gray">CardBalance-debug: {{ CardBalance }}</font><br />
    
    <!--Vue App End-->
</div>

@section Scripts{
    <script src="~/lib/vue/vue.js"></script>
    <script src="~/lib/axios/axios.js"></script>
    <script src="~/js/addcreditcard.js"></script>
}

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-26 06:37:55

在Vue中,您要发送这样一个对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    data: this.CardVendor                    
}

但是您的控制器Create方法只接受字符串输入,而不是对象,因此它是空的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost]        
public ActionResult Create([FromBody]String CardVendor)

Fix:(1) 可以修改c#控制器以接收对象而不是字符串。因此,请修改您的控制器操作,以便在下面这样的对象中执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost]        
public ActionResult Create([FromBody]CardVendorModel cardVendorModel)

并定义一个C#模型如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CardVendorModel
{
    public string data {get; set;}
}

(2) 或修改Vue代码将字符串发送到MVC控制器操作,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
axios.post('/CreditCard/Create', 
  '\'' + this.CardVendor + '\'')
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60415517

复制
相关文章
html使用vue axios,使用 Vue和axios
昨天写完了博客以后,有人就在我的博客下面留言说现在不是使用了Axios了吗?我赶紧再把Axios的例程给补上,并且做一个更新。
全栈程序员站长
2022/11/17
1.4K0
【翻译】.NET Core3.1发布
我们很高兴宣布.NET Core 3.1的发布。实际上,这只是对我们两个多月前发布的.NET Core 3.0的一小部分修复和完善。最重要的是.NET Core 3.1是长期支持(LTS)版本,并且将支持三年。和过去一样,我们希望花一些时间来发布下一个LTS版本。额外的两个月(在.NET Core 3.0之后)使我们能够选择和实施在已经非常稳定的基础上进行的正确改进。
梁规晓
2019/12/17
1.5K0
【翻译】.NET Core3.1发布
我们很高兴宣布.NET Core 3.1的发布。实际上,这只是对我们两个多月前发布的.NET Core 3.0的一小部分修复和完善。最重要的是.NET Core 3.1是长期支持(LTS)版本,并且将支持三年。和过去一样,我们希望花一些时间来发布下一个LTS版本。额外的两个月(在.NET Core 3.0之后)使我们能够选择和实施在已经非常稳定的基础上进行的正确改进。
HueiFeng
2020/01/22
1.4K0
.NET Core 3.1正式发布,还不赶快升级!
.NET Core 3.1于2019年12月3日正式发布,这是一个长期支持(LTS)版本,并且将支持三年,这个版本对.NET Core的许多方面进行了改进,建议您尽快升级。
郑子铭
2021/01/13
6260
.NET Core 3.1 的REST 和gRPC 性能测试
看到越南小哥 的github 上的Evaluating Performance of REST vs. gRPC , 使用的是.NET Core 3.0 , 今天我把它升级到.NET Core 3.1 同样做了一个测试,文章的结果和他的博客文章是一样的。
张善友
2020/06/19
1K0
.NET Core 3.1 的REST 和gRPC 性能测试
.NET Core 3.1和WorkerServices构建Windows服务
ASP.NET Core 3增加了一个非常有意思的功能Worker Service.他是一个ASP.NET Core模板,他允许我们创建托管长期的运行的后台服务,这些服务具体实现IHostedService接口的后台任务逻辑,他被成为"托管服务".同时他们可以部署到windows中Windows服务,以及Linux守护程序.
HueiFeng
2020/01/22
6190
.NET Core 3.1和WorkerServices构建Windows服务
Vue axios
https://github.com/Coxhuang/vue-axios-demo
Autooooooo
2020/11/09
1.7K0
Vue axios
.NET Core 3.1和WorkerServices构建Windows服务
ASP.NET Core 3增加了一个非常有意思的功能Worker Service.他是一个ASP.NET Core模板,他允许我们创建托管长期的运行的后台服务,这些服务具体实现IHostedService接口的后台任务逻辑,他被成为”托管服务”.同时他们可以部署到windows中Windows服务,以及Linux守护程序.
HueiFeng
2020/02/24
1.2K0
MySQL 中NULL和空值的区别?
作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值。那你知道它们有什么区别吗?
全栈程序员站长
2022/07/20
2.7K0
MySQL 中NULL和空值的区别?
【vue学习】vue axios
【vue学习】vue axios 安装vue axios npm install --save axios vue-axios 安装依赖 npm install 在main.js中引入 在项目中使用axios模块 import Vue from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios,axios) 发送请求 解决跨域问题 <!-- spring-mvc里的内容--> <!-- 解决A
Swingz
2020/12/18
5090
EF Core 3.1 入门视频-06 修改和删除
http://mpvideo.qpic.cn/0b78wmaacaaa24ajzqdojvpvbm6dagzqaaia.f10002.mp4?dis_k=c1adbc7d5c171092c6e3d50
宿春磊Charles
2022/03/29
1890
EF Core 3.1 入门视频-05 添加和查询
http://mpvideo.qpic.cn/0bf2huaogaaaoqah5qdov5pvapod4m6qbyya.f10002.mp4?dis_k=a09094c6d6a06ebd388dee7
宿春磊Charles
2022/03/29
3080
dotNet Core 3.1 使用 Elasticsearch
Elasticsearch 是基于 Lucene 的搜索引擎。可以非常方便地实现分布式的全文搜索,本文介绍在 dotNet Core 3.1 中怎样使用 Elasticsearch 。
oec2003
2021/02/19
8070
dotNet Core 3.1 使用 Elasticsearch
Vue 的axios的使用
axios直接进行访问会出现跨域问题,需要配置代理了。(前提是服务器没有设置禁止跨域的权限问题)
我不是费圆
2020/09/22
8350
基于vue表单设计3.1如何实现内容发布
现有一需求,能够发布5个主专题内容:要闻速览、公示公告、专题专栏、工作动态、综合服务,其中专题专栏、工作动态和综合服务下面包含n个子项,用户可以随时维护。发布者可根据上面分类发布视频、图片、压缩包、word、Excel、text等内容。
爱上歆随懿恫
2022/08/15
6980
基于vue表单设计3.1如何实现内容发布
【vue学习】axios
文章出自https://www.jianshu.com/p/d771bbc61dab
kirin
2020/05/09
1.3K0
Vue-Axios
Axios是一个开源的可以用在浏览器端和NodeJs的异步通信框架,她的主要作用就是实现AJAX异步通信,其功能特点如下:
张小驰出没
2021/04/22
8160
Vue使用axios
3、使用   mounted: function () {     // 按需引入     axios.get(‘https://api.coindesk.com/v1/bpi/currentprice.json’).then(response => {       console.log(‘按需引入’)       console.log(response.data)     }).catch(error => console.log(error))   },
苦咖啡
2019/12/10
1.2K0
Vue学习-axios
以下的axios网络请求的代码都在Vue项目src文件夹下的main.js中完成。
花猪
2022/02/17
8520
Vue学习-axios
vue安装axios
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
7960

相似问题

.NET Core 3.1、Vue、Axios和[ValidateAntiForgeryToken]

290

Asp.net Core Mvc Jquery client signalr和web api core 3.1 signalr,带域发布

117

.NET Core3.1-角9- MVC -处理数据创建中的空值

22

Axios发布空请求

60

未处理Asp.net Core3.1和Axios的Web请求

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文