2013-05-26 2 views
2

Если представление позволяет разрешить редактирование только одного свойства, но все другие свойства отображаются (DisplayFor, не редактируемые), а также , что является хорошим способом спроектировать передачу измененного значения контроллеру?MVC 4 - передать измененное значение из View в контроллер

Прямо сейчас у меня есть скрытые поля ввода для всех свойств, отображаемых с помощью DisplayFor, и контроллер получает полный переданный объект.

Это довольно неэффективно, и я знаю, что достаточно разместить только идентификатор этого объекта и измененное значение.

Пользователь может ввести значение, которое будет изменено следующим образом:

@Html.EditorFor(model => model.Verkaufspreis) 
    @Html.ValidationMessageFor(model => model.Verkaufspreis) 

я мог бы передать идентификатор объекта, как этот

@Html.ActionLink("Edit", "Edit", new { id=Model.ID }) 

Но как бы я передать значение, которое было изменено ? Спасибо за ваш вклад.

+0

вы знаете значение, которое supose изменить –

+0

Если вы намерены уведомить контроллер без выполнения фактический почтовый запрос, то вы должны использовать ajax. –

+0

@COLD TOLD: Да, я знаю стоимость, это небольшая торговая игра, и действие «Продать запас», пользователь должен ввести цену. – peter

ответ

2

, если вы хотите, чтобы получить значение, и вы не хотите, чтобы вернуть модель зная имя значения вы можете использовать FormCollection

[HttpPost] 
public ActionResult (FormCollectio collection) 
{ 

    string Verkaufspreis1=collection["Verkaufspreis"].ToString(); 

} 
1

MVC позволяет все виды связывания, например, вы могли бы пойти

[HttpPost] 
public ActionResult (int ID, String Verkaufspreis) 
//Have to be the same propery name as your model 
{ 

    //Get original object with the ID 
    //change the "Sell of Stock" field 
} 

Это будет динамически передавать ID и Verkaufspreis в качестве параметров.

Это позволит вам иметь только идентификатор и значение, которое необходимо изменить, так как вы получите остальную информацию из своей базы данных (или где бы то ни было) при обратной передаче, только обновив требуемое значение.

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

1

Вместо того чтобы помещать много скрытых входов в вашу форму, вы можете это сделать.

Просто опубликуйте измененные значения и идентификатор для действия. Прочтите полный объект из своего источника данных и обновите новые значения и сохраните их.

[HttpPost] 
public ActionResult Update(CustomerViewModel model) 
{ 
    Customer customer=repositary.GetCustomerFromID(model.ID) 
    customer.DisplayName=model.DisplayName; 
    repositary.SaveCustomer(customer); 
    return RedirectToAction("ProfileUpdated"); 
} 

В этом случае вам необходимо отправить только ID и DisplayName свойства из формы

@model CustomerViewModel 
<h2>Update Customer details</h2> 
@using(Html.Beginform()) 
{ 
    Display Name : @Html.TextBoxFor(x=>x.DisplayName) 
    @Html.HiddenFor(x=>x.ID) 
    <input type="submit" value="Save" /> 
} 
Смежные вопросы