2017-07-05 72 views
-1

我有兩個模型數據。 請看看在Asp.net mvc中查看模型問題C#

public class StoreTransactionAngular 
    { 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public int StoreId { get; set; } 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public int TargetId { get; set; } 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public DateTime TransactionDate { get; set; } 

     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     [MustHaveOneElementAttribute(ErrorMessage = "At least a task is required")] 
     [MinLength(1)] 
     [EnsureOneElement(ErrorMessage = "At least a person is required")] 
     public List<StoreTransactionDetails> Details { get; set; }   
    } 

    public class StoreTransactionDetails 
    { 
     public int ItemId { get; set; } 
     public string ItemName { get; set; } 
     public bool IsUsed { get; set; } 
     public string IsUsedText { get; set; } 
     public double Quantity { get; set; } 
     public string Unit { get; set; } 
    } 

我想我的數據存儲到另一個表

public class StoreTransaction 
    { 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public int StoreId { get; set; } 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public int TargetId { get; set; } 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public DateTime TransactionDate { get; set; } 

     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     //public List<StoreTransactionDetails> Details { get; set; } 
     public string ItemIds { get; set; } 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public string Quantities { get; set; } 
     [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
     public string IsUseds { get; set; } 
    } 

是否有可能這樣做,我有以下view.cshtml代碼

@model StoresManagement.ViewModel.StoreTransactionAngular 
@{ 
    ViewBag.Title = "Store Transaction Manage"; 
} 
@using (Html.BeginForm(null, null, FormMethod.Post, new { @class = "ajaxForm", ng_controller = "IncomeController" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="panel panel-info"> 
     <div class="panel-heading"> 
      Transaction Data 
     </div> 
     <div class="panel-body"> 
      <div class="row"> 
       <div class="col-sm-4"> 
        @Html.DropDownListFor(x => x.StoreId, (SelectList)ViewBag.StoreList, "Select Store", new { @class = "form-control" }) 
        @Html.ValidationMessageFor(model => model.StoreId, "", new { @class = "text-danger" }) 
       </div> 
       <div class="col-sm-4"> 
        @Html.DropDownListFor(x => x.TargetId, (SelectList)ViewBag.VendorList, "Select Vendor", new { @class = "form-control" }) 
        @Html.ValidationMessageFor(model => model.TargetId, "", new { @class = "text-danger" }) 
       </div> 
       <div class="col-sm-4"> 
        @Html.TextBoxFor(x => x.TransactionDate, new { @class = "form-control", placeholder = "Enter Date", ng_model = "date" }) 
        @Html.ValidationMessageFor(model => model.TransactionDate, "", new { @class = "text-danger" }) 

       </div> 
      </div> 
     </div> 
    </div> 

    <div class="panel panel-default"> 
     <div class="panel-heading"> 
      Transaction Details 
     </div> 
     <div class="panel-body"> 
      <div class="row"> 
       <div class="col-sm-4"> 
        @Html.DropDownList("CategoryId", (SelectList)ViewBag.CategoryList, "Select Category", new { @class = "form-control" }) 

       </div> 
       <div class="col-sm-4"> 
        <select ng_model="ItemId" ng-options="p as p.label for p in ItemId" id="ItemId" name="ItemId" class="form-control"> 
         <option unit="" value="">Select Item</option> 
        </select> 
       </div> 
       <div class="col-sm-1"> 
        <label class="checkbox"> 
         <input type="checkbox" ng_model="IsUsed" name="IsUsed" id="IsUsed" /> 
         Is Used؟ 
        </label> 
       </div> 
       <div class="col-sm-2 relative"> 
        <input type="number" ng_model="Quantity" step="0.01" min="0" max="9999999999" id="Quantity" name="Quantity" placeholder="Quanitity" class="form-control" /> 
        <span ng_model="Unit" class="Unit"></span> 
       </div> 
       <div class="col-sm-1"> 
        <button id="btnAddItem" class="btn btn-success"><i class="fa fa-plus"></i></button> 



       </div> 

      </div> 
      <hr /> 
      <table id="tblItems" class="table table-hover table-striped"> 
       <thead> 
        <tr> 
         <th>Item</th> 
         <th width="20%">Status</th> 
         <th width="20%">Quantity</th> 
         <th width="3%"></th> 
        </tr> 
       </thead> 
       <tbody> 

        @foreach (var item in Model.Details) 
        { 
         <tr> 
          <td> 
           @Html.DisplayFor(modelItem => item.ItemId)<br /> 
          </td> 
          <td> 
           @Html.DisplayFor(modelItem => item.ItemName)<br /> 
          </td> 
          <td> 
           @Html.DisplayFor(modelItem => item.Quantity)<br /> 
          </td> 

         </tr> 
        } 
        <tr ng-repeat="ItemModel in ListItem"> 
         <td>{{ItemModel.ItemName}}</td> 
         <td>{{ItemModel.IsUsedText }}</td> 
         <td>{{ItemModel.Quantity}} {{ ItemModel.Unit }}</td> 

         <td width="10%" class="text-right"> 
          <div classn-group btn-group-justified"> 
           <a class="btn btn-xs btn-primary" ng-click="getCustomer(ItemModel)"> 
            <i class="glyphicon glyphicon-edit"></i> 
           </a> 
           <a class="btn btn-xs btn-warning" ng-click="deleteCustomer(ItemModel)"> 
            <i class="glyphicon glyphicon-trash"></i> 
           </a> 
          </div> 
         </td> 

        </tr> 
       </tbody> 
      </table> 
      <div class="alert alert-warning"> 
       There is no Item selected 
      </div> 
      @*@Html.HiddenFor(x => x.ItemIds) 
      @Html.HiddenFor(x => x.Quantities) 
      @Html.HiddenFor(x => x.IsUseds)*@ 
      @Html.ValidationMessageFor(model => model.Details, "", new { @class = "text-danger" }) 

     </div> 
    </div> 
    <button class="btn btn-primary btn-lg" type="submit"><i class="fa fa-save"> </i> Save</button> 
     @Html.ActionLink("Cancle", "Index", null, new { @class = "btn btn-lg btn-default", data_dismiss = "modal" }) 
} 

這部分不起作用

@*@Html.HiddenFor(x => x.ItemIds) 
    @Html.HiddenFor(x => x.Quantities) 
    @Html.HiddenFor(x => x.IsUseds)*@ 

任何人都可以幫助我使這部分工作,因爲這些值是必要的。

由於提前,需要更多的細節,你可以通過評論問

+2

'not working'的定義是什麼?視圖的模型類是'StoreTransactionAngular',它沒有這些屬性。 –

+0

是的,我知道你可以讓我知道如何解決這個問題,我需要從兩個模型中獲取值,並且想要將這些值保存到StoreTranaction表 –

+0

您是否嘗試執行模型綁定,其中前兩個表提供輸入,但post方法試圖綁定到第三個?如果是這樣,也許還會顯示您的發佈方法簽名。 –

回答

1

調整您的視圖模型

public class StoreTransactionAngular 
{ 
    [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
    public int StoreId { get; set; } 
    [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
    public int TargetId { get; set; } 
    [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
    public DateTime TransactionDate { get; set; } 

    [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
    [MustHaveOneElementAttribute(ErrorMessage = "At least a task is required")] 
    [MinLength(1)] 
    [EnsureOneElement(ErrorMessage = "At least a person is required")] 
    public List<StoreTransactionDetails> Details { get; set; }  

    [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
    public string ItemIds { get; set; } 
    [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
    public string Quantities { get; set; } 
    [Required(ErrorMessageResourceType = typeof(App_GlobalResources.Labels), ErrorMessageResourceName = "Required")] 
    public string IsUseds { get; set; }  
} 

公開賽

@Html.HiddenFor(x => x.ItemIds) 
@Html.HiddenFor(x => x.Quantities) 
@Html.HiddenFor(x => x.IsUseds) 

註釋現在,您可以用JS設置ItemIds,數量和IsUseds的值。一旦你點擊提交,你將在你的視圖模型中獲得值作爲後端操作中的參數。


更新以上。

您的視圖模型是StoreTransactionAngular,它不包含ItemIds,數量和IsUseds。這就是錯誤發生的原因。

最簡單的方法是將「StoreTransaction」添加到您的視圖模型中。然後,您可以在您的操作中單擊「提交」按鈕後彈出並處理這些值。

+0

可以請你告訴我如何添加商店交易查看模型 –

+0

我有另一個值來自另一個模型 –

+0

@seriouscoder我已經更新了答案。 –