2016-05-10 2 views
0

Я перехожу от разработки WPF к Asp MVC и начал делать приложение Asp MVC. До сих пор я создал мой:Как передать данные на типизированный объект контроллера?

  • модель

  • контроллер

и

  • вид
(с соответствующими полями).

Th Следующий шаг включает отправку данных, введенных в мою форму, в контроллер на . Отослать нажмите кнопку.

Я знаю, что в WPF я могу привязать свойства управления к свойству в viewmodel, также будет событие щелчка на кнопке, которую я не вижу в MVC.

Это мой псевдо понимание того, как сделать это в MVC, но поправьте меня, если я»неправильно (модель имеет тип Case):

1.Задайте нажатия кнопки событие для отправки данных формы управления.

2.Пассируйте данные в конструктор контроллера и назначьте набранный объект Case.

Вопрос:

Как вы можете передать просмотреть значения на кнопку отправить в машинописный объект в контроллере?

Код:

View -

 <form action="" method="post"> 
      <div class="form-horizontal"> 
       <div class="col-lg-6"> 


         <!-- SELECT STATUS STATIC--> 
         <div class="form-group"> 
          <label class="col-md-3 control-label" for="Current Status">Status</label> 
          <div class="col-md-8"> 
           <select id="Status" name="Status" onchange="" class=" form-control"> 
            <option value="Down">Down</option> 
            <option value="Up">Up</option> 
           </select> 
          </div> 
         </div> 


         <!-- SELECT APP STATIC--> 
         <div class="form-group"> 
          <label class="col-md-3 control-label" for="App">App</label> 
          <div class="col-md-8" > 
           <select id="App" name="App" onchange="" class=" form-control"> 
            <option value="SAP">SAP</option> 
            <option value="JAP">JAP</option> 
           </select> 
          </div> 
         </div> 

         <asp:Button id="b1" Text="Submit" runat="server" /> 

       </div> 
      </div> 
     </form>   <!-- 

Controller -

public class CaseController : Controller 
{ 


    public ActionResult Index() 
    { 
     return View(); 
    } 

} 

Модель -

Public class Case 
{ 
    public string Status { get; set; } 
    public string App { get; set; } 

} 
+0

Вам просто нужен ' ', который отправит пары имя/значение или элементы формы в метод POST. Предложите перейти на сайт MVC и проработать учебные пособия, чтобы изучить основы –

ответ

1

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

Я предлагаю вам привязать ваш view/страницу к view model. Модель представления - это своего рода модель, которая будет представлять ваши данные в представлении, будь то textboxes, drop down lists, textareas, radio buttons, checkboxes и т. Д. Он также может отображать статический текст на вашем представлении. Я написал подробный ответ, в какой вид модели, если у вас есть время, пожалуйста, пойти и прочитать его:

What is ViewModel in MVC?

Go и создать модель представления. Он будет содержать два списка, которые будут представлять ваши два выпадающих списка. Каждый список имеет id, связанный с ним, который будет содержать значение выбранного раскрывающегося элемента списка:

public class CaseViewModel 
{ 
    public int StatusId { get; set; } 

    public List<Status> Statuses { get; set; } 

    public int AppId { get; set; } 

    public List<App> Apps { get; set; } 
} 

Ваш domain models, а именно Status и App, для вышеупомянутых списков:

public class Status 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

public class App 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

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

public ActionResult Index() 
{ 
    CaseViewModel model = new CaseViewModel(); 

    model.Statuses = new List<Status>(); 
    model.Statuses.Add(new Status { Id = 1, Name = "Down" }); 
    model.Statuses.Add(new Status { Id = 2, Name = "Up" }); 

    model.Apps = new List<App>(); 
    model.Apps.Add(new App { Id = 1, Name = "SAP" }); 
    model.Apps.Add(new App { Id = 2, Name = "JAP" }); 

    return View(model); 
} 

Как только вы заселена ваши два списка, вы передаете модель представления непосредственно вид. Вид получит модель с сильным типом и сделает с ней то, что ему нужно сделать. В вашем случае будет создана форма с двумя выпадающими списками и кнопкой отправки. Я оставил все ваши CSS для ясности (просто пойти и добавить его):

@model WebApplication_Test.Models.CaseViewModel 

@using (Html.BeginForm()) 
{ 
    <div> 
      @Html.DropDownListFor(
       m => m.StatusId, 
       new SelectList(Model.Statuses, "Id", "Name", Model.StatusId), 
       "-- Select --" 
     ) 
      @Html.ValidationMessageFor(m => m.StatusId) 
    </div> 
    <div> 
      @Html.DropDownListFor(
       m => m.AppId, 
       new SelectList(Model.Apps, "Id", "Name", Model.AppId), 
       "-- Select --" 
     ) 
      @Html.ValidationMessageFor(m => m.AppId) 
    </div> 
    <div> 
      <button type="submit">Submit</button> 
    </div> 
} 

Так что теперь у вас есть два выпадающие списки заполняются данными. Выберите значение в каждом и нажмите кнопку отправки. Ваше представление привязано к модели представления и сохранит значения при отправке формы. Значения в списках не сохраняются при отправке формы и должны быть заполнены повторно:

[HttpPost] 
public ActionResult Index(CaseViewModel model) 
{ 
    // Check form validation 
    if (!ModelState.IsValid) 
    { 
      // If validation fails, rebind the lists and send the current view model back 
      model.Statuses = new List<Status>(); 
      model.Statuses.Add(new Status { Id = 1, Name = "Down" }); 
      model.Statuses.Add(new Status { Id = 2, Name = "Up" }); 

      model.Apps = new List<App>(); 
      model.Apps.Add(new App { Id = 1, Name = "SAP" }); 
      model.Apps.Add(new App { Id = 2, Name = "JAP" }); 

      return View(model); 
    } 

    // Form validation succeeds, do whatever you need to do here 
    return RedirectToAction("Index"); 
} 

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

1

По мнению просто добавьте кнопку в форму, подобную

<button id="b1" Text="Submit"/> 

В контроллере добавьте способ действия для обработки сообщения.

public class CaseController : Controller 
{ 
    [HttpPost] 
    public ActionResult Index(Case case) 
    { 
     //Do Something 
     return View(); 
    } 

    public ActionResult Index() 
    { 

    return View(); 
    } 
} 

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

1

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

  1. На представлении в кнопке управления добавьте свойство onclick, указывающее на функцию javascript и передающий параметр.В этих образцах будут выбран ряд на GridView

    <input id="GenerateData" type="button" value="GenerateData" onclick="generateData(App.grdNameOfGridview.getRowsValues({selectedOnly:true}) [0]);" />

  2. наПредставления создать яваскрипт функцию, использовать AJAX для вызова контроллера, отметьте В параметре, который может быть проходящим от кнопки события нажатия на яваскрипт функции который будет использовать ajax для вызова контроллера. В этом примере я использую ExtJS рамки, если вы хотите, вы также можете использовать JQuery, а

    generateData= function (recordData) { var jsonStringContractUnit = JSON.stringify(recordData); Ext.Ajax.request({ url: '../ControllerName/GenerateData', method: 'POST', params: { SelectedContractUnit: jsonStringContractUnit },

  3. На контроллере параметр будет проходить с точки зрения и будет магазин на SelectedData

    public ActionResult GenerateData(string SelectedData) { }

Смежные вопросы