DataTable模型在Mvc中绑定

时间:2012-11-14 08:34:56

标签: asp.net-mvc datatable controller model-binding

我使用带有aspx视图引擎的asp.net mvc从excel文件中读取,从中提取联系人信息,将其显示给用户,当他确认将其保存在数据库中时。

现在,在我的页面中,我将DataTable作为模型,并使用foreach循环向用户显示。然后我有一个提交按钮,当用户点击它时,我希望我的数据表回到Controller中的Action。但是我的数据表是空的。

如何让我的数据表回到我的控制器?

aspx第一行:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Authenticated.master"
Inherits="System.Web.Mvc.ViewPage<System.Data.DataTable>" %>

控制器动作定义:

public virtual ActionResult SaveExcelContacts(DataTable dt)

1 个答案:

答案 0 :(得分:1)

我认为你无法在提交时绑定DataTable,或者至少它不是很好的概念。请查看DataTable http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx的文档。将所有数据发送到客户端并在服务器上检索它以重建DataTable对象太复杂了 您最好将DataTable中的数据提取到您自己的模型类中,然后尝试在提交时绑定到它。不要忘记以视图的形式包含隐藏的输入,因此数据将被发布到服务器并且可以绑定。

更新 - 只添加了一些可以帮助您解决问题的代码段

// some service for data retrieval
public interface IUserService{
    /// <summary>
    /// Extracts MyUserInfo object from DataTable (or excel)
    /// </summary>
    MyUserInfo GetUserInfo(int id);
    void SaveUserInfo(MyUserInfo userInfo);
}

// model class
public class MyUserInfo
{
    public int UserId { get; set; }
    public string Name { get; set; }
}

//controller
public class MyController : Controller
{
    IUserService userService;

    [HttpGet]
    public ActionResult UserInfo(int userId)
    {
        var user = userService.GetUserInfo(userId);

        return View(user);
    }

    [HttpPost]
    public ActionResult UserInfo(MyUserInfo myUserInfo)
    {
        userService.SaveUserInfo(myUserInfo);
        return RedirectToAction("SomeOtherAction","OnControllerOfYourChoice");
    }
}

视图

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyUserInfo>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% using (Html.BeginForm("UserInfo","MyController"))
       { %>
       <label>UserName:</label>
       <%= Model.Name %>
       <%= Html.HiddenFor(m => m.UserId) %>
       <%= Html.HiddenFor(m => m.Name) %>
       <input type="submit" name="ConfirmUser" value="Confirm" />
    <%} %>
</asp:Content>