Javascript 我应该如何获取表单的输入,并将该输入发送给C#类?ASP.Net核心-Razor页面

Javascript 我应该如何获取表单的输入,并将该输入发送给C#类?ASP.Net核心-Razor页面,javascript,ajax,html,asp.net-core,Javascript,Ajax,Html,Asp.net Core,我正在ASP.NET核心Razor页面中编写一个基本的公文包页面。我希望在底部有一个联系人表单,但是我似乎无法在C#class OnPostSendEmail()的文本字段中获得输入 我一直在跟踪,以实际发送电子邮件。但我没有任何东西要发送,因为我无法将输入传递给C#类。 顺便说一下,请不要只说“使用Ajax”等等 以下是我的.cshtml.cs代码: namespace Portfolio.Pages { 公共类索引模型:PageModel { 公共互联网 { } public-EmailCo

我正在ASP.NET核心Razor页面中编写一个基本的公文包页面。我希望在底部有一个联系人表单,但是我似乎无法在C#class OnPostSendEmail()的文本字段中获得输入

我一直在跟踪,以实际发送电子邮件。但我没有任何东西要发送,因为我无法将输入传递给C#类。 顺便说一下,请不要只说“使用Ajax”等等

以下是我的.cshtml.cs代码:

namespace Portfolio.Pages
{
公共类索引模型:PageModel
{
公共互联网
{
}
public-EmailConfig-EmailConfig=new-EmailConfig();
PostSendEmail上的公共操作结果(string fromAddr、string subject、string body、string phone、string firstName、string LastName)
{
SmtpClient=新的SmtpClient(“smtp.gmail.com”);
client.UseDefaultCredentials=false;
client.Credentials=新系统.Net.NetworkCredential(“电子邮件”、“密码”);
MailMessage MailMessage=新建MailMessage();
mailMessage.From=新邮件地址(emailConfig.FromAddr);
mailMessage.To.Add(“ToEmail”);
mailMessage.Body=emailConfig.Body+emailConfig.Phone;
字符串tempEmailSub=emailConfig.Subject.ToString();
tempeEmailSub+=(“,”,emailConfig.Name.ToString());
tempeEmailSub+=(“,”,emailConfig.LastName.ToString());
emailConfig.Subject=tempailsub;
mailMessage.Subject=emailConfig.Subject;
client.Send(mailMessage);
返回null;
}
}
公共类EmailConfig
{
来自addr{get;set;}的公共字符串
//公共字符串ToAddr{get;set;}
公共字符串体{get;set;}
公共字符串主题{get;set;}
公用字符串电话{get;set;}
公共字符串名称{get;set;}
公共字符串LastName{get;set;}
}
}
这是我的HTML表单:

<form asp-page-handler="sendemail" id="contact-form" method="post" action="">
                    <div class="messages"></div>
                    <div class="controls">
                        <div class="row">
                            <div class="col-md-6">
                                <input asp-for="emailConfig.Name" id="Name" type="text" name="name" placeholder="Your firstname *" required="required" class="form-control">
                            </div>
                            <div class="col-md-6">
                                <input asp-for="emailConfig.LastName" id="LastName" type="text" name="surname" placeholder="Your lastname *" required="required" class="form-control">
                            </div>
                            <div class="col-md-6">
                                <input asp-for="emailConfig.FromAddr" id="FromAddr" type="text" name="email" placeholder="Your email *" required="required" class="form-control">
                            </div>
                            <div class="col-md-6">
                                <input asp-for="emailConfig.Phone" id="Phone"type="text" name="phone" placeholder="Your phone" class="form-control">
                            </div>
                            <div class="col-md-12">
                                <textarea asp-for="emailConfig.Body" id="Message" type="text" name="message" placeholder="Message for me *" rows="4" required="required" class="form-control"></textarea>
                            </div>
                            <div class="col-md-12 text-center">

                                <button type="submit" asp-route-data="HttpPostAttribute" asp-page-handler="SendEmail" class="btn btn-outline-primary">Send message</button>

                            </div>
                        </div>
                    </div>
                </form>

我认为输入参数的名称与您在ajax代码中发布的名称不同 OnPostSendEmail( 来自addr的字符串, 字符串主题, 字符串正文, 字符串电话, 字符串firstName, 字符串LastName

这是ajax代码的数据部分:

     data: {
                 **FromAddr**: $("#CommentText").val(),
                 **Phone**: $("#Phone").val(),
                 **Subject**: $("#Subject").val(),
                 **Message**: $("#Message").val(),
                 **FirstName**: $("#FirstName").val(),
                 **LastName**: $("#LastName").val()
             },

Ajax数据参数名称必须与c代码相同。

为了简单起见,您可以使用Razor模型绑定将信息从客户端发送到服务器

对于Razor模型绑定,您需要使用
[BindProperty]

下面是一个工作演示:

IndexModel

public class IndexModel : PageModel
{
    public void OnGet()
    {

    }
    [BindProperty]
    public EmailConfig emailConfig { get; set; }
    public ActionResult OnPostSendEmail()
    {
        var email = emailConfig;
        return null;
    }
    public class EmailConfig
    {
        public string FromAddr { get; set; }
        //public string ToAddr { get; set; }
        public string Body { get; set; }
        public string Subject { get; set; }
        public string Phone { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
    }
}
对于客户端razor页面,不需要指定
id=“Name”type=“text”Name=“Name”
,并且在使用
asp page handler=“sendmail”

<form asp-page-handler="sendemail" id="contact-form" method="post">
    <div class="messages"></div>
    <div class="controls">
        <div class="row">
            <div class="col-md-6">
                <input asp-for="emailConfig.Name" placeholder="Your firstname *" required="required" class="form-control">
            </div>
            <div class="col-md-6">
                <input asp-for="emailConfig.LastName" placeholder="Your lastname *" required="required" class="form-control">
            </div>
            <div class="col-md-6">
                <input asp-for="emailConfig.FromAddr" placeholder="Your email *" required="required" class="form-control">
            </div>
            <div class="col-md-6">
                <input asp-for="emailConfig.Phone" placeholder="Your phone" class="form-control">
            </div>
            <div class="col-md-12">
                <textarea asp-for="emailConfig.Body" placeholder="Message for me *" rows="4" required="required" class="form-control"></textarea>
            </div>
            <div class="col-md-12 text-center">
                <button type="submit" asp-route-data="HttpPostAttribute" asp-page-handler="SendEmail" class="btn btn-outline-primary">Send message</button>
            </div>
        </div>
    </div>
</form>

发送消息
<form asp-page-handler="sendemail" id="contact-form" method="post">
    <div class="messages"></div>
    <div class="controls">
        <div class="row">
            <div class="col-md-6">
                <input asp-for="emailConfig.Name" placeholder="Your firstname *" required="required" class="form-control">
            </div>
            <div class="col-md-6">
                <input asp-for="emailConfig.LastName" placeholder="Your lastname *" required="required" class="form-control">
            </div>
            <div class="col-md-6">
                <input asp-for="emailConfig.FromAddr" placeholder="Your email *" required="required" class="form-control">
            </div>
            <div class="col-md-6">
                <input asp-for="emailConfig.Phone" placeholder="Your phone" class="form-control">
            </div>
            <div class="col-md-12">
                <textarea asp-for="emailConfig.Body" placeholder="Message for me *" rows="4" required="required" class="form-control"></textarea>
            </div>
            <div class="col-md-12 text-center">
                <button type="submit" asp-route-data="HttpPostAttribute" asp-page-handler="SendEmail" class="btn btn-outline-primary">Send message</button>
            </div>
        </div>
    </div>
</form>