2

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

现在在我的页面中,我将 DataTable 作为模型,并通过 foreach 循环向用户展示。然后我有一个提交按钮,当用户单击它时,我希望我的数据表返回到控制器中的操作。但我的数据表为空。

我怎样才能让我的数据表回到我的控制器?

aspx 第一行:

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

控制器动作定义:

public virtual ActionResult SaveExcelContacts(DataTable dt)
4

1 回答 1

2

我认为您无法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>
于 2012-11-14T11:18:41.237 回答