Какой ValueProviderFactory принимает данные формы? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть этот код в Global.asax:

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //ValueProviderFactories.Factories.RemoveAt(0);
            //I have tried replacing 0 above with 1 to 6.
            //The following Factories are present in ValueProviderFactories.Factories:
            //ChildActionValueProviderFactory
            //FormValueProviderFactory
            //JsonValueProviderFactory
            //RouteDataValueProviderFactory
            //QueryStringValueProviderFactory
            //HttpFileCollectionValueProviderFactory
            //JQueryFormValueProviderFactory
            ValueProviderFactories.Factories.Clear();            
        }
    }

Я заметил, что очистка всех ValueProviderFactory приводит к тому, что данные формы поступают в метод действия как null, однако при попыткеудалить по одному, раскомментировав строку RemoveAt и закомментировав ValueProviderFactories.Factories.Clear(); данные формы, которые поступают как не null.

, которые ValueProviderFactory отвечает за получение данных формы?

Вот вид:

@using MvcModels.Models
@model IList<AddressSummary>
@{
    Layout = null;
}
<h2>Addresses</h2>

@using (Html.BeginForm())
{
    <fieldset>
        <legend>Address</legend>
        <div><label>City:</label>@Html.Editor("[0].City")</div>
        <div><label>Country:</label>@Html.Editor("[0].Country")</div>
    </fieldset>
    <button type="submit">Submit</button>
}

Метод действия:

public ActionResult Address(IList<AddressSummary> addresses)
{
    addresses = addresses ?? new List<AddressSummary>();
    return View(addresses);
}

Модель:

public class AddressSummary
{        
    [Required]
    public string City { get; set; }
    [Required]
    public string Country { get; set; }
}
...