Объединить несколько строк, отправить в контроллер? - PullRequest
0 голосов
/ 20 декабря 2018

В настоящее время я создаю HTML-форму, которая принимает вводимые пользователем данные, создает из них тело сообщения и отправляет его мне по электронной почте.Поскольку пользователю нужно заполнить 10 различных полей ввода, я бы хотел объединить строки в одну строку - messageBody.Когда я определяю строки с помощью {get;задавать;} в модели они должны быть открытыми, чтобы я мог получить к ним доступ в форме в представлении.Однако, когда я пытаюсь объединить все строки в модели, я не могу, потому что «Инициализатор поля не может ссылаться на нестатическое поле».Я попытался изменить строки на «общедоступную статическую строку», и это позволило мне ссылаться на строки в модели, но он больше не мог ссылаться на строки в представлении, потому что «нельзя получить доступ с помощью ссылки на экземпляр; вместо этого уточните его с помощью имени типа«.Я переключил их обратно на «открытую строку» и подумал, что, возможно, я мог бы просто объединить их в Razor в самом представлении, но когда я попробую это, он не распознает строки, потому что «имя« myString »не существует втекущий контекст. "

Я отчасти заблудился от того, что попробовать дальше.Насколько я понимаю (что не так уж и хорошо), мои строки ДОЛЖНЫ быть открытыми, чтобы получить к ним доступ из представления, но они также ДОЛЖНЫ быть статичными, чтобы я мог объединить их в одну строку?Это не имеет особого смысла для меня, я действительно надеюсь, что я просто что-то напортачу.

Моя модель выглядит так:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace CuttingEdgeWebsite2._0.Models
{
    public class ServiceRequest
    {
        [Key]
        public int serviceRequestID { get; set; }
        [Required]
        public string serviceRequestName { get; set; }
        [Required]
        public string serviceRequestEmail { get; set; }
        public string serviceRequestCompany { get; set; }
        public string serviceRequestAddress { get; set; }
        [Required]
        public string serviceType { get; set; }
        public string serviceRequestCity { get; set; }
        public string serviceRequestState { get; set; }
        public string serviceRequestZip { get; set; }
        [Required]
        public string serviceRequestNumber { get; set; }
        public string serviceRequestComments { get; set; }
    }
}

Мой вид выглядит следующим образом:

@model MyWebsite.Models.ServiceRequest

@using (Html.BeginForm("Email", "ServiceRequestsController", FormMethod.Post))
{
    <div class="servicesReq">
        <div class="serviceReqForm">
            <div class="col-left">
                <label>
                    <span class="required">* </span><span>Name:</span><br />
                    @Html.TextBoxFor(model => model.serviceRequestName)
                </label><br />
                        <label>
                            <span class="required">* </span><span>Email:</span><br />
                            @Html.TextBoxFor(model => model.serviceRequestEmail)
                        </label><br />
                <label>
                    <span>Company:</span><br />
                    @Html.TextBoxFor(model => model.serviceRequestCompany)
                </label><br />
                <label>
                    <span>Address:</span><br />
                    @Html.TextBoxFor(model => model.serviceRequestAddress)
                </label><br /><br />
            </div>
            <div class="serviceTypeGrid">
                <span class="required">* </span><span>Please choose what type of servicing you require:</span><br /><br />
            </div>
            <div class="col-left2">
                <label class="serviceType">
                    <input type="radio" name="serviceType" value="Electrical" /> Electrical<br />
                    <input type="radio" name="serviceType" value="Lighting" /> Lighting<br />
                    <input type="radio" name="serviceType" value="Energy" /> Energy<br />
                    <input type="radio" name="serviceType" value="Multiple" /> Multiple<br />
                </label><br /><br />
            </div>
            <div class="col-right">
                <label>
                    <span>City:</span><br />
                    @Html.TextBoxFor(model => model.serviceRequestCity)
                </label><br />
                <label>
                    <span>State:</span><br />
                    @Html.TextBoxFor(model => model.serviceRequestState)
                </label><br />
                <label>
                    <span>Zip Code:</span><br />
                    @Html.TextBoxFor(model => model.serviceRequestZip)
                </label><br />
                <label>
                    <span class="required">* </span><span>Phone Number:</span><br />
                    @Html.TextBoxFor(model => model.serviceRequestNumber)
                </label><br />
            </div>
            <label class="commentText">
                <span>Comments:</span><br />
                @Html.TextAreaFor(model => model.serviceRequestComments, new { @class = "servReqComment" })
            </label>
            <div class="formSubmitButton">
                <input type="submit" value="Submit" /><br />
                <br />
            </div>
        </div>

    </div>
}

Любые идеи о том, где / как объединить строки в этой ситуации, будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я понял, что вы используете другое пространство имен в вашем представлении.Ваша модель остается под CuttingEdgeWebsite2._0.Models, и вы используете MyWebsite.Models.ServiceRequest для просмотра.

Чтобы объединить всю строку, вы можете следовать несколькими способами.Добавьте GetMessage() метод внутри модели:

public string GetMessage() 
{
        return $"{serviceRequestID} {serviceRequestName} {serviceRequestEmail} {serviceRequestCompany} {serviceRequestAddress} {serviceType} {serviceRequestCity} {serviceRequestState} {serviceRequestZip} {serviceRequestNumber} {serviceRequestComments}"
}

И используйте этот метод где угодно.Вы также можете следовать пути, описанному в @ valvetater65

0 голосов
/ 20 декабря 2018

Я бы не стал управлять данными в Razor, но вместо этого позволил бы контроллеру управлять и подготовить их

Ваш метод ServiceRequestController / Email получит экземпляр объекта ServiceRequest в качестве аргумента (я предполагаю это, потому что вы используете метод POST).

В этом методе вы можете легко добавить процесс, проходящий через свойства объекта ServiceRequest и объединяющий их в виде строки (это предполагает, что вы разделяете значения с помощью ',').

[HttpPost]
public ActionResult Email(ServiceRequest myData)
{
    try
    {
        var myConcatenatedSrr = 
        string.Join(",",myData.prop1,myData.prop2,myData.prop3, ....)
        //Your e-mail logic here... 
    }
    catch (System.Exception)
    {
        throw;
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...