0

OK、私は MVC が初めてで、答えが見つからない問題に取り組んでいます。

jQueryを使用して、FormModelオブジェクトとrowIdをコントローラーのActionメソッドに渡そうとしています。rowId は期待どおりに取得されますが、FormModel は null として取得されるか、すべてのプロパティがデフォルト値に設定されて取得されます。

これは MVC 3 バインディング メカニズムと関係があると思いますが、MVC を初めて使用するので 100% 確信が持てません。

Action メソッドの非常に単純化されたバージョンを次に示します。

    [HttpPost]
    public ActionResult RemoveProductMessage(FormModel form, int rowId)
    {
        try
        {
            if(Request.IsAjaxRequest())
            {

            }
        }
        catch
        {
            return Redirect("~/DefaultExceptionPage.htm");
        }

        return PartialView("_ProductMessage", form);
    }

値を渡すために使用している JavaScript は次のとおりです。

$(document).ready(
(function () {
    $("#remove-product-message-row").live(
        "click",
        function (rowId) {
            var url = '/Forms/RemoveProductMessage';
            var x = $('#main-form').serialize();
            var dataToSend = { form: JSON.stringify(x), rowId: 1 };

            $.ajax({
                url: "/Forms/RemoveProductMessage",
                type: 'POST',
                data: $.toDictionary(dataToSend),
                success: function (result) {
                    $("#all-product-messages").html(result);
                }
            }); // End of $.ajax call
        });
}));

私はいくつかの異なることを試しましたが、現在ここにある jQuery プラグイン ( jquery.todictionary ) を試していますが、うまくいきません。私は、このプラグインを使用したり、これを機能させる他の方法を使用したりすることに縛られていません。私はオープンです。

$('#main-form').serialize() に関していろいろ試してみましたが、すべて役に立ちませんでした。どんな助けでも大歓迎です。

ありがとう。

詳細を追加するために編集されました

わかりました、私は Firebug を見て、フォームモデルのみをパラメーターとして取る別のアクションメソッドの POST を次のように見ました:

AdministrationFormNumber 5809 BflBaseFormModel.BaseForm... 5809 BflBaseFormModel.BaseForm... 8/1/2010 12:00:00 AM BflBaseFormModel.BflFormB... S_5809DYN_082010 BflBaseFormModel.BflFormB... S_5809DYN_082010 BflBaseFormModel.BflFormB... DYN BflBaseFormModel.BflFormB ... エージェント BflBaseFormModel.BflFormB... AS BflBaseFormModel.BflFormB... GE BflBaseFormModel.BflFormB... LM BflBaseFormModel.BflFormB... OC BflBaseFormModel.BflFormB... アクティブ BflBaseFormModel.BflOblig...
BflBaseFormModel.BondSubT.. .
BflBaseFormModel.BondType... 6 BflBaseFormModel.StateNam... Massachusetts BflBaseFormModel.Title Transient/Itinerant Vendor - MA CreatedDate 3/15/2012 2:39:36 PM FormNumber 05809 Product.Attachments false Product.AvailableOnline Product.AvailableOnline Product.BondAmtMax 0.00 Product.BondAmtMin 0.00 Product.BondAmtStd
Product.BondEffectiveDate
Product.BondExpirationDat...
Product.BondObligationDes...
Product.BondTermMonths
Product.BondType
Product.CancelDays
Product.CategoryId 0 Product.ClassCode
Product.ContactEmail
Product.ContactName Product.ContactPhone
製品。 ContactUrl
Product.CounterSignatures
Product.Description Product.EandOFlag false Product.EarliestTermEffec... 1/1/0001 12:00:00 AM Product.EndorsementFileNa...
Product.FormId 0 Product.FormTitle
Product.MinCreditScore 0 Product.ObligationType
Product.Obligee.ObligeeNa. ..
Product.ProductLineId
Product.ProductVersionAva... 1/1/0001 12:00:00 AM Product.ProductVersionExp... 1/1/0001 12:00:00 AM Product.RateCode
Product.RateType � Product.RenewalFileName Product .RenewalMethod
Product.RiskType
Product.SpecialInstructio...
Product.State
QiFormModel.Attachment N QiFormModel.Description マサチューセッツ州 - 一時的/巡回ベンダー ボンド QiFormModel.DigitalSignat... False QiFormModel.EffDateWrappe... True QiFormModel.FileName LMS_15809_082010.xdp QiFormModel.FormNumber LMS_15809/ 8/2010 行 ID b6c0c014-3915 -be0d-7bb7c106372c StateOfEntity を追加

ただし、RemoveProductMessage の POST を見ると、次のように表示されます。

form AdministrationFormNumber=5809&FormNumber=05809&RowID=b6c0c011-6153-4391-be0d-7bb7c106372c&CreatedDate=3%2F15%2F2012+2%3A39%3A36+PM&StateOfEntity=Added&BflBaseFormModel.Title=Transient%2FItinerant+Vendor+-+MA&BflBaseFormModel.BaseFormID=5809&BflBaseFormModel.BaseFormRevisionDate= 8%2F1%2F2010+12%3A00%3A00+AM&BflBaseFormModel.BondTypeId=6&BflBaseFormModel.BondSubTypeId=&BflBaseFormModel.StateName=Massachusetts&BflBaseFormModel.BflObligeeName=&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.PostedCompanyModels=AS&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.PostedCompanyModels=GE&BflBaseFormModel. BflFormByLibraryModels%5B0%5D.PostedCompanyModels=LM&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.PostedCompanyModels=OC&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.LibraryName=Agent&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.FormFileType=DYN&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.FileName=S_5809DYN_082010&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.StatusInLevel=Active&QiFormModel.FormNumber=LMS_15809%2F+8%2F2010&QiFormModel.Description=Commonwealth+of+ Massachusettes+-+Transient%2FItinerant+Vendor+Bond&QiFormModel.DigitalSignatureWrapped=False&QiFormModel.EffDateWrapped=True&QiFormModel.Attachment=N&QiFormModel.FileName=LMS_15809_082010.xdp&BflBaseFormModel.BflFormByLibraryModels%5B0%5D.FileName=S_5809DYN_082010&Product.FormId=0&Product.FormTitle=&Product.AvailableOnline=&Product .EarliestTermEffectiveDate=1%2F1%2F0001+12%3A00%3A00+AM&Product.ProductVersionAvailabilityDate=1%2F1%2F0001+12%3A00%3A00+AM&Product.ProductVersionExpirationDate=1%2F1%2F0001+12%3A00%3A00+AM&Product.Attachments=false&Product.Description=&Product.RiskType=&Product.RateType=%EF%BF%BD&Product.EandOFlag=false&Product.BondEffectiveDate=&Product.BondExpirationDate=&Product.BondTermMonths =&Product.CancelDays=&Product.RenewalFileName=&Product.RenewalMethod=&Product.EndorsementFileName=&Product.BondAmtStd=&Product.BondAmtMin=0.00&Product.BondAmtMax=0.00&Product.MinCreditScore=0&Product.SpecialInstructions=&Product.State=&Product.ProductLineId=&Product.BondType =&Product.CategoryId=0&Product.AvailableOnline=&Product.ClassCode=&Product.RateCode=&Product.CounterSignatures=&Product.BondObligationDescription=&Product.ObligationType=&Product.ContactName=&Product.ContactPhone=&Product.ContactEmail=&Product.ContactUrl=&Product.ProductMessages%5B0%5D.MsgCode=%24+++&Product.ProductMessages%5B0%5D.MessageToAddress=1235&Product.ProductMessages%5B0%5D.StateOfEntity=Added&Product.ProductMessages%5B0%5D .MessageRowID=cae73ecf-4bc9-45f2-bd5d-4040dc7362ef&Product.Obligee.ObligeeName=

キーと値のペアリングで値が正しく設定されていないようです。

モデル オブジェクト:

public class FormModel : BaseModel
{
    private ProductModel productModel;

    public BflBaseFormModel BflBaseFormModel
    {
        get;
        set;
    }

    public QiFormModel QiFormModel
    {
        get;
        set;
    }

    [DisplayName("Form Number")]
    public string FormNumber
    {
        get;
        set;
    }

    public int AdministrationFormNumber
    {
        get;
        set;
    }

    public System.Guid RowID
    {
        get;
        set;
    }

    public System.DateTime CreatedDate
    {
        get;
        set;
    }

    [AutoMapper.IgnoreMap]
    public string Information
    {
        get;
        set;
    }

    [AutoMapper.IgnoreMap]
    public ProductModel Product
    {
        get
        {
            if (productModel == null)
            {
                productModel = new ProductModel();
            }

            return productModel;
        }

        set
        {
            productModel = value;
        }
    }

    public void SetFormModels()
    {
        // Map Companies to BflForms
        foreach (var bflFormByLibraryModels in BflBaseFormModel.BflFormByLibraryModels)
        {
            if (bflFormByLibraryModels.BflFormModels != null)
            {
                bflFormByLibraryModels.BflFormModels.Clear();
            }
            else
            {
                bflFormByLibraryModels.BflFormModels = new List<BflFormModel>();
            }

            foreach (var selectedCompany in bflFormByLibraryModels.PostedCompanyModels)
            {
                var bflFormModel = new BflFormModel();
                bflFormModel.CompanyID = selectedCompany;
                bflFormModel.BaseFormID = bflFormByLibraryModels.BaseFormID;
                bflFormModel.BaseFormRevisionDate = bflFormByLibraryModels.BaseFormRevisionDate;
                bflFormModel.LibraryID = bflFormByLibraryModels.LibraryID;
                bflFormByLibraryModels.BflFormModels.Add(bflFormModel);
            }
        }

        // Verify that QILatest has been set correctly
        if (QiFormModel != null && QiFormModel.AdministrationFormNumber == null)
        {
            QiFormModel = null;
        }
    }
}

ビューはかなり大きく、さまざまな部分ビューで構成されているため、ここには掲載しません。

OK、ここで別のパスを実行し、別の方法でデータを取得したので、すべて問題ありません。

4

1 に答える 1

0

このように、stringify メソッドで 2 つのパラメーターを渡します。

var dataToSend = { form: JSON.stringify(x), rowId: JSON.stringify(1) };
于 2012-06-08T12:46:30.553 に答える