2015-11-28 1 views
0

У меня есть метод AddAddress(int Id), и я не могу понять, как значение Id переходит к представлению (когда я проверяю view source визуализированного представления, это значение есть).Как значение id переходит от метода действия к представлению

Мне нужно создать более сложный, но похожий метод, и я просто не понимаю, как значение Id переходит к визуализированному представлению. Мне просто нужно знать, как это происходит. Большое спасибо

Метод AddAddress:

[HttpGet] 
public ActionResult AddAddress (int Id) 
{  
    return View(); 
} 

[HttpPost] 
public IActionResult AddAddress(AddressModel address) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View("AddAddress", address); 
    } 
    if (!address.Address_Id.HasValue|| address.Address_Id == 0) 
    { 
     _addressService.insertAddress(address); 
    } 
    else 
    { 
     _addressService.updateAddress(address); 
    } 
    return RedirectToAction("Index"); 
} 

мнение, что получает Id:

@model Clients.Models.AddressModel 

@using (Html.BeginForm(FormMethod.Post)) 
{ 
    @Html.ValidationSummary() 

    @Html.HiddenFor(m => m.Id)<br /> 
    @Html.HiddenFor(m => m.Address_Id)<br /> 
    @Html.LabelFor(m => m.AddressLine_1) 
    @Html.TextBoxFor(m => m.AddressLine_1) 
    @Html.ValidationMessageFor(m => m.AddressLine_1)<br /> 
    @Html.LabelFor(m => m.AddressLine_2) 
    @Html.TextBoxFor(m => m.AddressLine_2) 
    @Html.ValidationMessageFor(m => m.AddressLine_2)<br /> 
    @Html.LabelFor(m => m.Postcode) 
    @Html.TextBoxFor(m => m.Postcode) 
    @Html.ValidationMessageFor(m => m.Postcode)<br /> 
    @Html.LabelFor(m => m.Town) 
    @Html.TextBoxFor(m => m.Town) 
    @Html.ValidationMessageFor(m => m.Town)<br /> 
    @Html.LabelFor(m => m.DateMovedIn) 
    @Html.TextBoxFor(m => m.DateMovedIn) 
    @Html.ValidationMessageFor(m => m.DateMovedIn)<br /> 

    <input type="submit" value="OK"/> 
} 
+2

Непонятно, что вы просите. Покажите свое мнение. –

+0

Объясните, что именно вам нужно в результате? –

+0

поделитесь своим кодом. !! – Dilip

ответ

0

Ваше мнение бритву сильно типизированных к AddressModel класса. Поэтому в вашем методе действия GET создайте объект класса AddressModel, установите значение свойства Id независимо от того, какое значение пришло к вашему методу действий в качестве параметра и отправить этот объект в представление.

[HttpGet] 
public ActionResult AddAddress (int Id) 
{  
    var model = new AddressModel(); 
    model.Id = id; 
    return View(model); 
} 

Вам необходимо явно передать данные на ваш взгляд из вашего метода действий. Нет другого волшебного способа сделать это. Если вы этого не сделаете, у него все еще будет значение по умолчанию для свойств целочисленного типа, которое равно 0.

+0

Как объяснил Стивен Мюке: «У вашего метода GET есть параметр с именем Id, поэтому его значение добавляется к значениям маршрута (посмотрите на атрибут действия вашего элемента). Когда ваша модель также имеет имя параметра Id, значение привязано к вашей модели при отправке формы, поскольку DefaultModelBinder считывает значения из параметров маршрута (и значений строки запроса) в дополнение к значениям формы " – Zet