ASP.NET MVC将字段作为XML字符串提交

本文关键字:XML 字符串 提交 字段 NET MVC ASP | 更新日期: 2023-09-27 18:04:36

我试图通过API而不是通常的<form action="http://www.mysite.com" method="post">提交表单数据作为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);

因为我不能像在Web表单中那样抓取firstnamex.Text控件,我该如何做到这一点?

ASP.NET MVC将字段作为XML字符串提交

您需要一个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.
    }
}

我喜欢我的模特胖;我的控制器很瘦;我的观点完全是弱智。

应该是这样的…

[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
}