【发布时间】:2016-03-15 20:13:59
【问题描述】:
目前我正在使用 Angular 2 Beta-9 和 Asp.Net MVC 6。 我正在尝试创建一个简单的联系表格作为测试。问题是我的表单数据似乎没有传递到服务器,而在 Angular 端似乎一切正常。
contact.ts
/// <reference path="../node_modules/angular2/typings/browser.d.ts" />
import {Component, View} from 'angular2/core';
import {NgForm} from 'angular2/common';
import {bootstrap} from 'angular2/platform/browser';
import {Http, Headers, HTTP_PROVIDERS} from 'angular2/http';
@Component({
selector: 'contact',
bindings: [ContactComponent],
viewProviders: [HTTP_PROVIDERS],
templateUrl: '/angular/contact'
})
export class ContactComponent {
http = undefined;
contact = {};
constructor(http: Http) {
this.http = http;
}
onSubmit() {
this.http.post('/contact/send', JSON.stringify(this.contact), new Headers({ 'Content-Type': 'application/json' })).subscribe();
}
}
bootstrap(ContactComponent);
Contact.cshtml
<form #f="ngForm" (ngSubmit)="onSubmit(contact)">
<div>
<div class="form-group">
<label for="name">Name</label>
<input type="text" [(ngModel)]="contact.Name" class="form-control text-input" id="name" placeholder="Name" />
</div>
<div class="form-group">
<label for="email">E-mail</label>
<input type="email" [(ngModel)]="contact.Email" class="form-control text-input" id="email" placeholder="E-mail" />
</div>
</div>
<div>
<div class="form-group">
<label for="subject">Subject</label>
<input type="text" [(ngModel)]="contact.Subject" class="form-control text-input" id="subject" placeholder="Subject" />
</div>
</div>
<div>
<div class="form-group">
<label for="message">Bericht</label>
<textarea type="text" [(ngModel)]="contact.Message" class="form-control" id="message" placeholder="Message"></textarea>
</div>
</div>
<div>
<div>
<button type="submit" class="btn btn-success">Send</button>
</div>
</div>
</form>
ContactController.cs
[HttpPost]
public IActionResult SendContact([FromBody]ContactVm contact)
{
//do something
}
ContactVm.cs
public class ContactVm
{
[Required]
[DataType(DataType.Text)]
public string Name { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required]
[DataType(DataType.Text)]
public string Subject { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string Message { get; set; }
}
我看不到或发现我做错了什么。在 http.post 之前,this.contact 已按应有的方式填写,但一旦到达服务器,它就是 null。
更新
发现Request.Form抛出如下错误:
Incorrect Content-Type: text/plain;charset=UTF-8
【问题讨论】:
-
能否添加
/angular/contact模板,联系人变量绑定是否正确.. -
添加了我正在使用控制器的模板和联系人模型。虽然我认为视图没问题,因为我在调试过程中注意到所有内容都正确传递给了 Post 函数。
-
您是否按照我的建议尝试了以下答案?
-
@JeffreyRosselle 您是否查看了正在发送的请求是那里的属性,它只是没有模型绑定?您是否尝试过显式绑定名称而不是 [(ngModel)]="contact.Name" name="contact.Name"
-
你可以试试
this.http.post('/contact/send', JSON.stringify({ contact: this.contact}), new Headers({ 'Content-Type': 'application/json' }))
标签: c# typescript angular asp.net-core-mvc