C# ASP.NET MVC以XML字符串形式提交字段
我试图通过API而不是通常的C# ASP.NET MVC以XML字符串形式提交字段,c#,asp.net-mvc,C#,Asp.net Mvc,我试图通过API而不是通常的将表单数据作为XML字符串提交 API接受XML字符串作为参数,如:HelloWorld 在Web表单中,我使用的旧方法是 String dataXml = "<Data>"; dataXml += "<firstnamex>" + firstnamex.Text + "</firstnamex>"; dataXml += "<lastnamex>" + lastnamex.Text + "</lastnamex&
将表单数据作为XML字符串提交
API接受XML字符串作为参数,如:HelloWorld
在Web表单中,我使用的旧方法是
String dataXml = "<Data>";
dataXml += "<firstnamex>" + firstnamex.Text + "</firstnamex>";
dataXml += "<lastnamex>" + lastnamex.Text + "</lastnamex>";
dataXml += "</Data>";
既然我不能像在Web表单中那样抓取
firstnamex.Text
控件,我该怎么做呢?它看起来像这样
[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
}
[HttpPost]
公共行动结果你的行动(你的模型)
{
字符串dataXml=“”;
dataXml+=“”+model.FirstName+“”;
dataXml+=“”+model.LastName+“”;
dataXml+=“”;
// ...
返回视图(模型);//或重定向或其他
}
您需要一个ViewModel,它表示您在此“页面”上从用户收集的内容,以便完成调用。首先,创建一个ViewModel来保存这些内容。此ViewModel还应包含实际调用DAL的代码。让您的控制器太清楚需要对实际数据做什么是一个坏主意。只需让它知道调用ViewModel的方法,以及如何处理返回值(如果有)
公共类YourViewModel
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
//根据需要在此处输入其他字段。
公共视图模型()
{
//您可以在此处输入所需的任何字段默认值
}
公共字符串插入记录()
{
字符串dataXml=“”;
dataXml+=“”+firstnamex.Text+“”;
dataXml+=“”+lastnamex.Text+“”;
dataXml+=“”;
mainApi.service1ws=新的mainApi.Service1();
返回ws.InsertRecord(dataXml);
}
}
公共类控制器
{
公共行动结果你的行动()
{
var viewModel=newyourviewmodel();
返回视图(viewModel);
}
[HttpPost]
公共操作结果YourAction(YourViewModel viewModel)
{
var resultfromsert=viewModel.InserRecord();
//根据上面返回的字符串或其他内容重定向到此处。
}
}
我喜欢我的模特胖;我的身体很瘦;我的观点完全是愚蠢的 从模型中获取名字。一个很好的开始是,在过去的几个月里,我已经做了很多MVC教程,但我仍然无法理解。我知道我应该先设置模型,然后基于模型创建一个视图,但我的问题是在用户单击submit后将结果生成一个XML字符串。否。。。ViewModel应该是哑的。它应该只负责视图所需的信息。看,我认为这些人真的非常聪明,但我个人并不喜欢像
“规则2”这样的东西——对于每种ViewModel类型,都定义了一个强类型视图“
。我将我的ViewModels扩展了一点,并允许不同的视图根据需要使用它们。可以精简ViewModel,但我认为这不是绝对需要的。我对直接了解我的业务领域的ViewModel很满意,但如果您想添加另一个抽象层以实现可分割性,也可以。
[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
}
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.
}
}