2013-03-19 2 views
0

Я пытаюсь представить данные формы как XML-строку через API, а не обычный <form action="http://www.mysite.com" method="post">.ASP.NET MVC отправить поля как строку XML

API принимает XML-строку в качестве параметра, например: <Data><firstnamex>Hello</firstnamex><lastnamex>World</lastnamex></Data>.

старый путь в Web Forms Я хотел бы сделать это

String dataXml = "<Data>"; 
dataXml += "<firstnamex>" + firstnamex.Text + "</firstnamex>"; 
dataXml += "<lastnamex>" + lastnamex.Text + "</lastnamex>"; 
dataXml += "</Data>"; 

, а затем

mainApi.Service1 ws = new mainApi.Service1(); 
string retVal = ws.InsertRecord(dataXml); 

Поскольку я не могу просто взять контроль firstnamex.Text как я мог в Web Forms, как бы Я делаю это?

+1

Получите имя от вашей модели. Отличное место для начала - http://asp.net/mvc. – jrummell

+0

Я провел кучу учебников MVC за последние пару месяцев, но до сих пор не могу понять. Я знаю, что сначала должен создать модель, а затем создать представление на основе модели, но моя проблема заключается в получении результата в XML-строке после того, как пользователь нажмет кнопку «Отправить». – Derek

ответ

0

Это будет выглядеть примерно так ...

[HttpPost] 
public ActionResult YourAction(YourModel model) 
{ 
    String dataXml = "<Data>"; 
    dataXml += "<firstnamex>" + model.FirstName + "</firstnamex>"; 
    dataXml += "<lastnamex>" + model.LastName + "</lastnamex>"; 
    dataXml += "</Data>"; 

    // ... 

    return View(model); // or redirect or whatever 
} 
1

Вам нужен ViewModel, который представляет то, что вы собираете от пользователя на этой «странице», чтобы завершить вызов. Итак, сначала создайте ViewModel для хранения этого материала. Этот ViewModel также должен содержать код, который фактически вызывает ваш DAL. Его плохая идея, чтобы ваш контроллер был слишком осведомлен о том, что нужно делать с фактическими данными. Просто сообщите ему, какой метод вызывать в ViewModel, а также как обрабатывать возвращаемое значение (если оно есть).

public class YourViewModel 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    // other fields here as needed. 

    public YourViewModel() 
    { 
     // you can put any field defaults you need here 
    } 

    public string InserRecord() 
    { 
     String dataXml = "<Data>"; 
     dataXml += "<firstnamex>" + firstnamex.Text + "</firstnamex>"; 
     dataXml += "<lastnamex>" + lastnamex.Text + "</lastnamex>"; 
     dataXml += "</Data>"; 
     mainApi.Service1 ws = new mainApi.Service1(); 
     return ws.InsertRecord(dataXml); 
    } 
} 

public class YourController 
{ 
    public ActionResult YourAction() 
    { 
     var viewModel = new YourViewModel(); 
     return View(viewModel); 
    } 

    [HttpPost] 
    public ActionResult YourAction(YourViewModel viewModel) 
    { 
     var resultFromInsert = viewModel.InserRecord(); 
     // redirect here based on string returned above, or whatever. 
    } 
} 

Мне нравятся модные модели; мои контроллеры Skinny; и мои взгляды сразу отстали.

+0

Нет ... ViewModel должен быть немым. Он должен отвечать только за информацию, необходимую View. См. Http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/ – jrummell

+1

Я думаю, что эти ребята действительно, очень умны, но я просто лично не забочусь о вещах например '' Правило №2. Для каждого типа ViewModel определен точно один строго типизированный View ". Я делаю свои ViewModels немного шире и позволяю различным представлениям использовать их по мере необходимости. Его ОК, чтобы смягчить ViewModel, но я просто не думаю, что это абсолютно необходимо. Мне просто нравится мой ViewModel, зная о моем бизнес-домене, но если вы хотите добавить еще один слой абстракции для возможности разборки, это тоже хорошо. – Graham

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