Как смоделировать свойство сложного типа модели страницы бритвы? - PullRequest
0 голосов
/ 29 января 2020

У меня есть страница бритвы, получающая потомка PageModel. Для страниц, предназначенных только для выставок (информационные панели, отчеты и т. Д. c), это работает как шарм. Я использую базовый класс PageModel, чтобы сделать так, чтобы все страницы отражали мою конфигурацию хостинга. json, делая ссылки внутри приложения динамическими c.

Итак, иерархия: PageModel -> BasePageModel -> ConfigTransmissorFragModel

Теперь у меня есть эта модель SendingConfiguration (я буду обрабатывать ее на нижнем уровне):

public class SendingConfiguration
{
    // I will edit this one
    [DisplayName("Send it to production server?")]
    public bool ProductionServer { get; set; }
}

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

// BasePageModel will process the urls of the site.
public class ConfigTransmissorFragModel : BasePageModel
{

    public SendingConfiguration SendConfig { get; set; }

    private void UpdateSendingConfiguration()
    {
        var Config = InfoExibicao.ConfigAtiva;
        ConfigEnvio.ProductionServer = Config.ProductionServer;
    }

    private InfoConfiguration _InfoExibition;
    public InfoConfiguration InfoExibition
    {
        get { return _InfoExibition; }
        set
        {
            _InfoExibition = value;

        }
    }

    public ConfigTransmissorFragModel() : base(null)
    {
        SendConfig = new SendingConfiguration();   
    }

    public ConfigTransmissorFragModel(
        ConfigDashboard PConfigDash,
        InfoConfiguration PInfoConfig
        ) : base(PConfigDash)
    {
        ConfigEnvio = new SendingConfiguration();
        this.InfoExibition = PInfoConfig;
        UpdateSendingConfiguration();
    }
}

Модель генерируется в контроллере:

var Fch = FacadeInfoConfig;
var InfoConfig = Fch.ObterInfoConfiguracao(IdTransmissor);
var CfgDash = ConfigDash;

var Modelo = new ConfigTransmissorFragModel(CfgDash, InfoConfig);
Modelo.UrlServer = ConfigHost.WebServiceUrl;

На странице бритвы у меня есть этот заголовок:

@page
@using ESenderWebService.ModeloPagina
@using Microsoft.AspNetCore.Mvc.RazorPages;
@using Negocio.Integracao.Configuracao;
@model ESenderWebService.ModeloPagina.ConfigTransmissorFragModel
@{
    //ViewData["Title"] = "Configuracao de Transmissor para envio";
    Layout = "~/Pages/Shared/_Layout_Dashboard.cshtml";
}

Форма:


    <form autocomplete="off" asp-controller="InfoConfig" asp-action="SalvarConfig" method="post">
        <div class="form-group">
            <fieldset>
                <legend style="width: auto; margin-bottom: auto;"> Configurações </legend>
                            <div>
                                @Html.CheckBoxFor(m => m.SendConfig.ProductionServer)
                                @Html.LabelFor(m => m.SendConfig.ProductionServer)
                            </div>
                            <div>
                                <button class="btn btn-primary " name="submit" type="submit">Save</button>
                            </div>

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

Моя проблема: как получить SendingConfiguration на моем почтовом обработчике?

    // This one explodes complaining that HttpContext is missing  
    [HttpPost()]
    public IActionResult SalvarConfig(ConfigTransmissorFragModel PModel)


    // This one never reflects what I mark in the form
    // It always returns false in PModel.ProductionServer
    [HttpPost()]
    public IActionResult SalvarConfig([FromForm] SendingConfiguration PModel)

Что я делаю не так?

1 Ответ

0 голосов
/ 30 января 2020

Я не уверен, почему первый синтаксис HttpPost взорвался в вашем случае, потому что он отлично работает в моем примере проекта.

enter image description here

...